WebDriverWait处于静态模式



我有一块代码

        WebDriverWait wait = new WebDriverWait(driver, 60);
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("map_background_3d")));

当执行为测试测试时,它可以正常工作。现在,我想创建可执行的jar并将我的代码移至主方法,当我从那里运行时,它会失败:

    Exception in thread "main" org.openqa.selenium.TimeoutException: Expected condition failed: waiting for visibility of element located by By.id: map_background_3d (tried for 60 second(s) with 500 milliseconds interval)
at org.openqa.selenium.support.ui.WebDriverWait.timeoutException(WebDriverWait.java:81)
at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:271)
at Tkt.lookForTickets(Tkt.java:83)
at Tkt.main(Tkt.java:34)                                               
Caused by: org.openqa.selenium.NoSuchElementException: Cannot locate an element using By.id: map_background_3d

我不明白。

我不知道您为什么会遇到此错误,但我可以指导您如何进行研究:

首先,如果您在无头模式下使用Chrome,我建议您(暂时(删除它,以便您可以看到发生了什么。其次,由于硒本身不知道(不应该受到影响(,如果它运行了测试NG或可执行文件的一部分,那么如果您看到UI的差异,那么您可能会在代码中做一些不同的事情。(可能是您在@Before方法中做了一些事情,您忘了移至main?(

现在,尝试查看您要寻找的元素是否真的可见。如果不是这样,请在代码中放一个断点,当您期望看到该元素但不看到该元素时,请打开Dev Tools(通过按F12(,然后搜索(CTRL F(对#map_background_3d。如果找到元素,则意味着该元素存在,但不可见,否则意味着树元素不存在。无论哪种情况,请尝试消除测试NG和可执行代码之间的差异以找到根本原因。

如果您能够以视觉识别元素,那么您的id可能错误。尝试使用开发工具再次识别它。

请注意,即使在理智页面上不应该有一个具有相同ID的元素,浏览器也不会强制执行,并且实际上可以。如果是这种情况,您可能会发现多个具有您查找的ID的元素,如果其中第一个不可见(即使第二个是(,您仍然可能会遇到此错误。

hth ...

最新更新