2

使用selenium并且webdriverJS我想创建一个测试来检查页面上是否未显示元素。为了检查一个或多个元素是否存在,我决定使用这个isDisplayed()函数:

driver.findElement(webdriver.By.css('.element')).isDisplayed();
  • true如果元素未显示,您是否知道如果元素返回的类似函数?
  • isDisplayed()在单个element. 有没有类似的方法来检查是否显示了多个元素?

提前感谢您的回答!

4

4 回答 4

3

isDisplayed() 在单个元素上使用时效果很好。有没有类似的方法来检查是否显示了多个元素?

这可以通过使用来解决map()。例子:

element.all(by.css(".element")).map(function (elm) {
    return elm.isDisplayed();
});

这将返回一个解析为布尔数组的承诺。

如果你想要一个布尔值,你可以使用reduce()

element.all(by.css(".element")).reduce(function (acc, elm) {
    return elm.isDisplayed().then(function (isDisplayed) {
        return isDisplayed && acc;
    });
}, false);
于 2015-09-24T14:25:13.693 回答
2

回答你的问题——

  • 不,如果元素不存在,则没有返回 true 的函数。您可以检查现有isDisplayed()方法的否定(错误)条件。您可以将各种测试框架与 webdriverjs 一起使用,并执行错误断言,如 jasmine、mocha 等...如何将 webdriverjs 与 Mocha 一起使用以及使用 jasmine 进行测试
  • 如果要检查是否显示了多个元素,则可以使用内置循环,例如.each()or.map().reduce()(仅适用于您有多个元素可以使用单个定位器获取的情况),或者您必须单独检查它们。

希望这可以帮助。

于 2015-09-24T10:06:05.480 回答
1

我发现这个解决方案有效。代码评估元素的存在并返回真或假。然后我可以评估这个值并在页面上执行其他操作。仍然有一些小错误:无法创建着色器缓存条目:-2`

const exit =await driver.findElement(By.css('input[id^="Login"] ')).then(
()=>{return true} ). catch((err=> { if(err.name=== "NoSuchElementError") return false;
throw new Error (" No such element")}));

const check= (elem) => {
    return new Promise( (resolve,reject)=> {
        setTimeout(elem=> { 
            if( elem ===true) {resolve('HA-HA-HA') }
            else {reject(new Error('Not ha-ha-ha'))}
        },500,elem)

       })
   };
`
于 2019-02-14T10:03:24.067 回答
1

我展示了我是如何解决这个问题的,jasmine以防将来有人需要它:

driver.findElement(webdriver.By.css('.element')).isDisplayed()
    .then(function(displayed) {
        expect(displayed).not.toBe(true);
    });
于 2015-09-24T14:09:21.593 回答