【问题标题】:Arquillian Graphene waitModel TimeoutException lets test end with Error instead of FailureArquillian Graphene waitModel TimeoutException 让测试以错误而不是失败结束
【发布时间】:2018-03-22 09:39:23
【问题描述】:

我认为我的问题与代码无关,而是与一般测试中等待 UI 元素或至少我对使用 JUnit 和 Selenium/Arquillian Graphene 测试 UI 的理解有关。

当使用 Arquillian Graphenes waitModel()(或任何其他等待 UI 元素的方法)并且元素在指定的超时后不存在时,我得到一个 seleniumTimeoutException,这让我的 JUnit-Test 以“错误”结束”。

ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 151.709 s <<< FAILURE! - in de.viasurance.UiTest
[ERROR] testHappyPath(org.test1.UiTest)  Time elapsed: 23.266 s  <<< ERROR!
org.openqa.selenium.TimeoutException: 

有没有更好的方法让测试以“失败”结束,而不用像这样的 try/catch 块包围我的测试的每一行:

try {
waitModel().withMessage("waiting for loginButton").until().element(loginButton).is().clickable();
} catch (TimeoutException timeoutException) {
fail("UI-Test failed because the following UI-element could not be found: \n" + timeoutException.getMessage());
}

【问题讨论】:

  • 您的try-catch {} 没有提供您预期的结果吗?
  • 问题是,几乎所有的测试用例都是这样的。我等待一个元素出现,然后单击它。如果我用 try/catch 块包围 1000 行测试用例中的每一行。它很快就会变成 5000 行代码和 80% 的样板代码。如果我用 try/catch 包围整个测试,那么当测试失败时,你看不到哪一行导致测试失败。
  • 逻辑非常简单。如果您可以使用适当的服务员设计您的 testcase/usecase,例如waitModel() 你的工作被缩短了。如果您倾向于使用try-catch {} 以确保安全,则可能会创建一个样板代码

标签: java selenium junit jboss-arquillian arquillian-drone


【解决方案1】:

您不必用 try/catch 块包围它并在 catch 块中失败

这应该由您的测试框架本身来处理。 TestNG 在这方面做得很好。

Graphene.waitModel()
        .withMessage("Login Button Not clickable")
        .until()
        .element(loginButton)
        .is()
        .clickable();

对于 Junit,您可以使用 TestWatcher 来检测错误并相应地失败。

【讨论】:

    猜你喜欢
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    相关资源
    最近更新 更多