2016-03-07 54 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并在发生这种情况时中断。 –