【问题标题】:how to resolve race conditions in webdriver如何解决 webdriver 中的竞争条件
【发布时间】:2013-10-11 11:05:12
【问题描述】:

我有一个混合使用 angular 和 asp.net 的应用程序。我的问题是通过设置 window.location 重定向主页,然后从服务器请求所需的数据和页面。

以前情况并非如此,所有路由都是通过 Angular 应用程序完成的。然而,由于要求,应用程序路由必须更改为现在的样子。

现在因为应用程序需要服务器端请求/响应(我相信),这导致我的测试出现竞争状况,因为我每 5 次测试只收到一次预期结果。

目前我无法提供代码来解释我的情况。但是,我将在今天晚些时候的编辑中提供一些代码。

我现在可以提供的唯一代码是正在运行的测试。尽管我不相信如果没有运行应用程序的代码,这会有所帮助。

【问题讨论】:

  • 你有机会发布代码后为什么不回答?

标签: angularjs selenium webdriver protractor


【解决方案1】:

最近的框架有这个功能,它将浏览器的 document.readState 设置为完成,然后加载内容。因此,测试可能会失败,因为我们预计会有一个元素存在。

对于这种情况,您必须使用显式等待元素出现,以便在页面加载或更改后对其执行操作。

【讨论】:

    【解决方案2】:

    下面是我们如何在项目中等待元素的示例(应用也是 angularjs,我们使用 Java 作为 webdriver):

    在我们的 Webdriver 实现中,我们添加了:

    private WebDriverWait iWait(int timeoutInSeconds) {
        return new WebDriverWait(webDriver, timeoutInSeconds);
    }
    

    我们要等待一个元素可见(“可见性是指该元素不仅显示出来,而且高度和宽度都大于0”):

    public void waitForElementToAppear(By by, int timeoutInSeconds) {
        iWait(timeoutInSeconds).ignoring(StaleElementReferenceException.class).until(ExpectedConditions.visibilityOfElementLocated(by));
    }    
    

    ExpectedConditions 类提供了许多其他开箱即用的条件,这里有一些:

    • elementToBeClickable
    • textToBePresentInElement
    • 标题包含
    • elementSelectionStateToBe

    更多内容请关注ExpectedConditions Javadoc

    如果需要自己创建条件,可以使用 ExoectedCondition (no 's') 类 ExpectedCondition Javadoc

    【讨论】:

      猜你喜欢
      • 2019-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-19
      • 2015-08-13
      • 2020-08-08
      • 1970-01-01
      相关资源
      最近更新 更多