2016-03-07 53 views
0

所以,我有一個硒webdriver的命令是如下所示while循環的條件:硒找到元素在while循環中的Java

  while (driver.findElement(By.cssSelector("a[action='cancel']")).isDisplayed() == true){ 
      driver.navigate().refresh(); 

      TimeUnit.SECONDS.sleep(5); 
      driver.findElement(By.id("479510558845313")).sendKeys(InstagramAievx.spamusernameinput); 

      driver.findElement(By.id("263795143794707")).sendKeys(InstagramAievx.spamcommentinput); 

      driver.findElement(By.id("u_0_4")).sendKeys(x); 
      driver.findElement(By.id("u_0_5")).click(); 
     } 

     TimeUnit.SECONDS.sleep(2); 
     driver.findElement(By.xpath("//a[contains(text(),'Okay')]")).click(); 
     killFirefox(); 

所以,我的問題是,當條件爲假它不會跳過while循環並轉到它下面的內容。它試圖做到這一點:driver.findElement(By.cssSelector("a[action='cancel']"))這使得程序失敗。我怎樣才能讓它在錯誤的時候跳過它,然後跳到循環之外?謝謝。

回答

1

您需要處理的情況下,當元素檢查,如果它是可見之前不存在:

while (true){ 
    WebElement button = null; 
    try { 
     button = driver.findElement(By.cssSelector("a[action='cancel']")); 
    } catch (NoSuchElementException ex){ 
     break; // button is missing, exit the loop 
    } 
    if (button.isDisplayed() == false) { 
     break; // button is hidden, exit the loop 
    } 

    driver.navigate().refresh(); 

    TimeUnit.SECONDS.sleep(5); 
    driver.findElement(By.id("479510558845313")).sendKeys(InstagramAievx.spamusernameinput); 

    driver.findElement(By.id("263795143794707")).sendKeys(InstagramAievx.spamcommentinput); 

    driver.findElement(By.id("u_0_4")).sendKeys(x); 
    driver.findElement(By.id("u_0_5")).click(); 
} 
+0

非常感謝您的建議! – AAlzaabi

0

你沒有說如何程序失敗,但我假設指示的findElement返回null?

我建議你調整你的循環,讓你這樣做(代碼未測試):

while (true) { 
    driver.navigate().refresh(); 
    WebElement cancelButton = driver.findElement(By.cssSelector("a[action='cancel']")); 
    if (cancelButton != null and cancelButton.isDisplayed()) { 
     ... the stuff to do if it is displayed 
    } else { 
     break; 
    } 
+0

對不起,但它給了我這個錯誤由​​於:org.openqa.selenium.NoSuchElementException:無法找到元素:{「method」:「css selector」,「selector」:「a [action = 'cancel']「}'我會嘗試你的建議並回復你。 – AAlzaabi

+0

啊!在這種情況下,問題是無法找到取消按鈕,所以您需要在while語句中使用try/catch塊來捕獲NoSuchElementException並在發生這種情況時中斷。 –