检查元素是否未显示 - WebDriverJS

时间:2015-09-24 09:51:00

标签: javascript selenium selenium-webdriver automation webdriverjs

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

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

提前感谢您的回答!

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分:2)

回答你的问题 -

  • 不,如果没有元素,则没有返回true的函数。您可以检查现有isDisplayed()方法的否定(错误)条件。您可以在webdriverjs中使用各种测试框架,并执行jasmine,mocha等错误断言...... How to use webdriverjs with Mochatesting with jasmine
  • 如果要检查是否显示了多个元素,则可以使用.each().map().reduce()等内置循环(仅当您有多个元素可以使用时才适用)使用单个定位器)或者您必须单独检查它们。

希望这有帮助。

答案 2 :(得分:1)

我展示了如何使用jasmine解决问题,以防将来有人可能需要它:

driver.findElement(webdriver.By.css('.element')).isDisplayed()
    .then(function(displayed) {
        expect(displayed).not.toBe(true);
    });

答案 3 :(得分:1)

我发现此解决方案有效。代码评估元素的存在并返回true或false。然后,我可以评估该值并在页面上执行其他操作。 仍然有一些小错误:无法创建着色器缓存条目:-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)

       })
   };
`