没有找到这样的元素错误

时间:2018-01-23 13:58:07

标签: java selenium-webdriver

无论我使用什么搜索类型,我总是得到“没有找到这样的元素”错误。为什么会这样?

public void CorrectPIN() throws InterruptedException{
    driver.findElement(By.id("identifier")).sendKeys("abhisingh1313@mailinator.com");
    driver.findElement(By.id("button")).click();
    Thread.sleep(5000);
     do {
        Thread.sleep(100);
    } while (driver.findElement(By.id("pin")).isDisplayed());
}

.................. 无论我使用什么搜索机制,我都无法找到driver.findElement(By.id("pin")).isDisplayed())上的元素。我甚至试过xpath。 基本上我希望webdriver等到屏幕上出现一个元素但它确实如此但即便如此我也不知道为什么它会导致错误无法找到元素错误。

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题是正确的,那么在检查while()循环中的条件之后你的所有步骤,即

driver.findElement(By.id("pin")).isDisplayed();

您看到 NoSuchElementException

Java Docs明确提到NoSuchElementException WebDriver.findElement(By by) WebElement.findElement(By by) 引发,与您的情况相符。

原因

有很多理由可以看到NoSuchElementException。其中几个如下:

  • 您使用的Locator Strategyid可能无法识别确切元素。
  • 该元素可能不在Viewport
  • 范围内
  • 当您的脚本搜索元素时,到那时元素可能未在HTML DOM
  • 中呈现

解决方案

出于上述原因的解决方案将是:

更新

您在以下行看到NoSuchElementException

while (driver.findElement(By.id("pin")).isDisplayed());

在您的代码块中,您想要检查driver.findElement(By.id("pin")).isDisplayed()中的 while loop 是不确定的。完成 driver.findElement(By.id("button")).click(); 后,系统会将您重定向到新页面,其中包含新的 HTML DOM 。因此,在新页面上,如果您希望driver.findElement(By.id("pin")).isDisplayed()成功,则必须根据我的答案诱导WebDriverWait WebElement 显示溶液#3。