【问题标题】:No Such Element Found Error未找到此类元素错误
【发布时间】:2018-07-02 09:03:57
【问题描述】:

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

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。 基本上我希望网络驱动程序等到屏幕上出现一个元素并且它确实存在但即使那样我也不知道为什么它会给出错误无法找到元素错误。

【问题讨论】:

  • 确切的错误信息是什么?
  • NoSuchElementExceptio:无法定位元素(方法:id,选择器:pin)
  • 请将该信息放入您的问题中。你有行号吗?
  • 是的,它是:} while (driver.findElement(By.id("pin")).isDisplayed());
  • 基本上我希望网络驱动程序等到屏幕上出现一个元素..

标签: java selenium-webdriver


【解决方案1】:

如果我正确理解了您的问题,那么在检查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());

从您的代码块来看,您为什么要在 while loop 中检查 driver.findElement(By.id("pin")).isDisplayed() 尚无定论。执行 driver.findElement(By.id("button")).click(); 后,您将被重定向到带有新 HTML DOM 的新页面。因此,在新页面上,如果您希望 driver.findElement(By.id("pin")).isDisplayed() 成功,您必须根据我的答案的解决方案#3 诱导 WebDriverWait显示 WebElement

【讨论】:

  • 感谢您的解释。这对我真的很有帮助。我只想在这里添加一件事:我觉得 webdriver 能够找到元素,因为它执行被暂停.. 之后我正在做什么。我手动输入 PIN 码。然后单击继续,然后元素(引脚字段)消失了,我的执行恢复并开始检查其他东西..我唯一的问题是..即使执行成功恢复。它为我提供了该特定步骤的 NSE。我希望能解释一下自己。如果你能在这里帮助我会很有帮助。
  • 我已更新我的答案。事实上,即使the webdriver is able to locate the element 仍然 driver.findElement(By.id("pin")).isDisplayed() 可能不成功。请参阅ExpectedCondition 文档。如果我的 Answer 已满足您的 QuestionAccept Answer 点击在我的 Answer 旁边的刻度线上,就在 VoteDown 箭头下方,因此刻度线变成 Green
猜你喜欢
  • 2023-03-28
  • 2021-09-26
  • 2010-11-01
  • 2023-03-21
  • 2011-07-18
  • 2016-12-12
  • 2018-03-15
  • 2021-06-02
  • 1970-01-01
相关资源
最近更新 更多