簡體   English   中英

Selenium Java-如果元素存在,請單擊;如果找不到元素,則繼續執行下一個命令

[英]Selenium Java - Click if element exists, continue with the next command if element not found

我正在嘗試創建腳本來測試網站(js應用程序),代碼幾乎完成了,但是遇到了問題。 該腳本應該在網站上編輯問題(該問題使用數據庫中的許多變量),並且取決於腳本是否失敗,或者是否有人編輯了該問題,腳本是否有可能彈出窗口消息(不是單獨的窗口或新標簽)。 我想要代碼:

單擊該元素(如果存在),或者如果該元素不存在,則轉到下一行代碼。

我嘗試使用,但沒有幫助:

Alert alert = driver.switchTo().alert();
alert.accept();

我的代碼:

driver.findElement(By.xpath("//button[2]")).click();                                        
// Click unselect all
Thread.sleep(1000);
driver.findElement(By.linkText("Romania")).click();                                     
// Select Romania
log.debug("Select Romania");
Thread.sleep(2000);
driver.findElement(By.linkText("Germany")).click();                                     
// Select Germany
log.debug("Select Germany");
Thread.sleep(2000);
driver.findElement(By.xpath("//div[4]/a")).click();                                     
// Click Save Button
log.debug("Click Save");
Thread.sleep(3000);

**driver.findElement(By.xpath("//div[4]/div/div/div/div/div/button")).click();**                
// Pop-up message
log.debug("Click Pop-up message");
Thread.sleep(3000);

/////////////// Single Answer

driver.findElement(By.linkText("Change")).click();                                      
// Click Change Template
log.debug("Click Change");
Thread.sleep(2000);

您可以在****(彈出窗口)之間找到問題所在的行,如何單擊該元素是否存在或移至driver.findElement(By.linkText(“ Change”))。click(); 如果找不到元素。

請讓我知道是否需要更多信息。

編輯:提供有關為何出現彈出窗口的更多詳細信息。 該腳本將編輯一個問題,該問題具有多個模板,並且在選擇了模板之后,該腳本應通過每個模板,腳本會將數據庫中的變量與該問題相關聯。 模板:

單個答案問題單個答案下拉問題多個答案問題多個答案下拉問題日期

當模板從多個答案更改為單個答案/日期或以其他方式更改時,彈出消息顯示為警告(已使用的變量將被刪除)。 在理想情況下,如果腳本成功完成(它將以單個答案下拉列表結尾-第一個問題是單個答案,因此不會出現彈出窗口)並且沒有人編輯問題,但如果腳本出現,我將不會遇到彈出窗口將模板更改為多個答案后,由於x原因而失敗,當我重新啟動腳本時,我將收到該彈出窗口/警告。

如上面的代碼所示,更改問題的語言時也會發生此問題,我遇到問題時有多個步驟。

目前,為了使腳本運行並避免上述問題,我需要自己編輯問題,並在運行腳本之前選擇特定的語言和模板。

如果找不到匹配的元素,則拋出NoSuchElementException的實例。

try {
    WebElement popUp = driver.findElement(By./**your expression**/);
    popUp.click();  
} catch(NoSuchElementException | StaleElementReferenceException e) {
    log.debug("Impossible to click the pop-up. Reason: " + e.toString());
}

我建議兩種方法。

  1. 只需輪詢DOM的彈出窗口,然后單擊按鈕(如果存在):

     List<WebElement> button = driver.findElements(By.xpath("//div[4]//button")); if (!button.isEmpty()) { button.get(0).click(); } .... 

driver.findElements()是用來避免試醒目NoSuchElementException使用的情況下driver.findElement()

  1. 您可以使用顯式等待來等待一段時間,以使按鈕出現:

     try{List<WebElement> button = (new WebDriverWait(driver,10)).until(ExpectedConditions.presenceOfElementsLocated(By.xpath("//div[4]//button"))); if (!button.isEmpty()) { button.get(0).click(); } } catch(TimeoutException e) { } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM