即使未启用/显示元素,循环也不会结束

时间:2017-06-09 17:09:58

标签: selenium selenium-webdriver while-loop webdriver

while循环应该在元素makePaymentButton未启用/显示时结束,但不会。

  

错误:线程“main”中的异常org.openqa.selenium.NoSuchElementException:无法找到id == makePaymentButton的元素

while(driver.findElement(By.id("makePaymentButton")).isEnabled())
{
    Thread.sleep(4000);
    driver.findElement(By.name("password_ccCvv")).sendKeys("999");
    Thread.sleep(4000);
    driver.findElement(By.id("makePaymentButton")).click();
    Thread.sleep(9000);
}

2 个答案:

答案 0 :(得分:0)

不确定为什么选择while循环,但没有一个循环可以完成同样的事情。在以下示例中,使用了Explicit Wait

// Define and wait (up to 10 seconds) for the "Make Payment" button
WebElement btnMakePayment = (new WebDriverWait(driver, 10))
.until(ExpectedConditions.presenceOfElementLocated(By.id("makePaymentButton")));
// Fill out password
driver.findElement(By.name("password_ccCvv")).sendKeys("999");
// Click "Make Payment" button
driver.findElement(By.id("makePaymentButton")).click();

答案 1 :(得分:0)

这是因为你试图找到一个不再显示的元素。您需要将findelement代码放入“try”。

必须是这样的:

WebElement verificator = driver.findElement(By.id("makePaymentButton")).isEnabled()
while(verificator)
          {
        Thread.sleep(4000);
         try {
           driver.findElement(By.name("password_ccCvv")).sendKeys("999");
           Thread.sleep(4000);
           driver.findElement(By.id("makePaymentButton")).click();
           Thread.sleep(9000);

        } catch (Exception e) {
           verificator = false;
        } 

     }

这是一个伪代码。如果它不起作用,请验证de sintax