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

Selenium 而循环不';即使未启用/显示元素,也不会结束,selenium,selenium-webdriver,while-loop,webdriver,Selenium,Selenium Webdriver,While Loop,Webdriver,当元素makePaymentButton未启用/显示但未显示时,While循环应结束 错误:线程“main”org.openqa.selenium.NoSuchElementException中出现异常:找不到id==makePaymentButton的元素 不确定为什么选择while循环,但是没有while循环也可以完成同样的事情。在下面的示例中,使用了 这是因为您试图找到一个不再显示的元素。您需要将findelement代码放入“try”中 一定是这样的: WebElement verifi

当元素
makePaymentButton
未启用/显示但未显示时,While循环应结束

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


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


这是因为您试图找到一个不再显示的元素。您需要将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

而不是while循环,您可以使用web驱动程序wait等待元素的可见性。我正在寻找解决方案,以解决此问题以及此循环不起作用的原因;t end如果您遇到异常,则循环将正确结束,而不是启用。您可以尝试显示。因为有时“已启用”总是正确的。@Murthi。也尝试使用isDisplayed()进行测试。它不起作用我正在使用while循环,因为在文本框中输入值后,我无法向前移动,在while循环的第三次或第四次尝试中,我可以向前移动
// 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();
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;
        } 

     }