【问题标题】:protractor: locating strategy for elements with the same attributes量角器:对具有相同属性的元素进行定位策略
【发布时间】:2015-05-20 17:15:05
【问题描述】:

我正在测试的网站是一个带有 Angular 的单页应用程序。

因此,很多 DOM 被提前加载并被隐藏。根据用户的操作,隐藏的 DOM 将被显示。无论 DOM 是显示还是隐藏,量角器都将其视为整个 DOM 树的一部分。当我通过 id 定位元素时:

this.usernameTextbox = element(by.id('username'));

它检测到有多个元素具有相同的 id,一个元素是可见的 (ng-show),另一个是隐藏的 (ng-hide)。

量角器有没有办法只定位未隐藏的元素?

【问题讨论】:

标签: javascript selenium selenium-webdriver webdriver protractor


【解决方案1】:

您是否尝试过以下方法:

browser.wait(function(){
    return element(by.id('username')).isDisplayed();
}, 1000).then(function(){
    //Your code here
});

【讨论】:

    【解决方案2】:

    您无法可靠地告诉 webdriver 仅定位可见元素,您需要获取与定位器匹配的所有元素并通过检查 "displayedness" 将它们过滤掉。

    也就是说,使用element.all()按id查找所有元素,使用filter() 过滤掉可见的,示例代码:

    var username = element.all(by.id("username")).filter(function (elm) {
        return elm.isDisplayed().then(function (value) {
            return value;
        });
    }).first();
    

    这里的“可靠”是指理论上您可以检查display: nonevisibility: hidden (reference) 的存在,但永远不要这样做,因为“显示性”本身就是一件相当复杂的事情该 webdriver 通过 isDisplayed() 方法公开/实现。

    【讨论】:

      猜你喜欢
      • 2016-12-11
      • 2020-05-03
      • 1970-01-01
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多