【问题标题】:How to continue execution after "NoSuchElementException" in Selenium (Java)?Selenium(Java)中的“NoSuchElementException”之后如何继续执行?
【发布时间】:2019-03-22 04:01:16
【问题描述】:

我正在尝试从此页面创建 WebElements 的 ArrayList:

如果所有元素都显示出来了,就可以添加到ArrayList中了。

ArrayList<WebElement> TodoArray = new ArrayList<WebElement>();

                        TodoArray.add(todo1);

如果我从网页中删除其中一个元素(不是代码),我会在运行测试用例时收到此错误:

org.openqa.selenium.NoSuchElementException: Unable to locate element: *[name='todo[9]']

有没有办法绕过这个错误,强制java跳过丢失的元素,但继续添加显示的元素?

我的代码非常简单。我正在使用 JUnit 来运行我的测试用例。使用 @FindBy 注释正确定义了元素。

@FindBy(name="todo[1]")
    WebElement todo1;

我尝试使用 Try/Catch 包围变量并使用 NoSuchElementException,但我不确定如何格式化它。在这种情况下可以使用“继续”关键字吗?

希望我提供了足够的信息。任何帮助,将不胜感激。谢谢!

【问题讨论】:

  • 你能说得更具体点吗?每当我使用 Try/Catch 时,我的代码都会停止,我确信我做错了。尽管缺少元素,我希望能够继续执行。如果缺少该元素,则不应将其添加到 ArrayList。
  • 欢迎来到 SO。为什么要对列表项进行硬编码,我会从应用程序中获取 to do 元素的动态列表。像这样的东西 `List todoItems = driver.findElements(By.cssSelector("generic css goes here"));
  • @Few_Line 发布你所有的代码

标签: java maven selenium junit page-factory


【解决方案1】:

Java Try/Catch 的确切语法是这样的:

try {
  @FindBy(name="todo[1]")
       WebElement todo1;
}
catch(NoSuchElementException e) {
  System.out.println("could not find element todo1");
}
...
//rest of your code

这有帮助吗?

【讨论】:

    【解决方案2】:

    或者你可以使用fluent wait,这样:

    Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
        .withTimeout(10, SECONDS)
        .pollingEvery(1, SECONDS)
        .ignoring(NoSuchElementException.class);
    

    我认为这是一种更优雅的方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-02
      • 1970-01-01
      • 2011-10-28
      相关资源
      最近更新 更多