javascript - Protractor/WebDriverJS 中的 by.js 定位器是什么?

标签 javascript selenium testing selenium-webdriver protractor

最近,我注意到 Protractor 文档中添加了一个新的定位器 - by.js() :

Locates an elements by evaluating a JavaScript expression, which may be either a function or a string.

我了解此定位器提供的功能,但我错过了此定位器有用的真实世界用例。我什么时候应该更喜欢使用 by.js 而不是 by.css 等其他内置定位器?

最佳答案

我觉得用例是使用核心 javascript 函数获取元素,每当 css 和其他元素定位器无济于事或没有我们可以使用的属性时。场景 -

  1. 如果您使用核心 javascript 函数将元素传递给 browser.executeScript,则可以使用 by.js 替换它。

示例:-

假设如果你必须得到一个出现在两者之间的顶部的元素,你可以这样得到它 -

var ele = element(by.js(function(){
    var ele1 = document.getElementById('#ele1');
    var ele2 = document.getElementById('#ele2');
    var val = ele1.compareDocumentPosition(ele2);
    if(val === 4) return ele1;
    else return ele2;
}));
  1. 如果你想使用它的 css 值(如颜色、字体等)获取元素...虽然在这种情况下可以使用 filter,但是 by.js 也可以支持它。
  2. 如果元素无法通过 cssxpath 或任何其他定位器访问,例如具有动画或过渡的伪元素

示例: -

假设有一个元素有 :before:after 转换 -

.element:before {
    color: rgb(255, 0, 0);
}

为了验证元素的颜色,我们可以使用 by.js 传入一个 javascript 语句来获取元素 -

var ele = element(by.js(function(){
    return window.getComputedStyle(document.querySelector('.element'), ':before');
}));
expect(ele.getCssValue('color')).toEqual('rgb(255, 0, 0)');

希望对您有所帮助。

关于javascript - Protractor/WebDriverJS 中的 by.js 定位器是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36869816/

相关文章:

reactjs - 使用 @testing-library/react 测试 Material ui slider

testing - 在哪里可以看到 Jmeter 中的 xPath Extractor 结果

javascript - 根据另一组元素的类不断隐藏不同的元素

javascript - StackOverflow 如何知道问题何时有新答案?

selenium - 如何与 gradle 并行运行 Serenity Web 测试?

python - Selenium 在Chrome中以新用户身份不断开放

javascript - 允许为显示的每个数据表选择一次行

javascript - 如何安装 Yahoo!电视上的 Connected TV Widget 以便我可以对其进行测试?

javascript - Selenium 如何批量处理多个 isElementDisplayed 调用?

angularjs - 我将如何使用 AngularJs 模拟 Jasmine 的 then() 响应测试