检查元素是否未显示 - WebDriverJS
Check if element is not displayed - WebDriverJS
使用 selenium
和 webdriverJS
我想创建一个测试来检查页面上是否未显示某个元素。为了检查一个或多个元素是否存在,我决定使用 isDisplayed()
函数:
driver.findElement(webdriver.By.css('.element')).isDisplayed();
- 你知道 returns
true
if the elements if the elements if the elements if the element NOT displayed? 类似的函数吗?
isDisplayed()
在单个 element
上使用时效果很好。有没有类似的方法来检查是否显示了多个元素?
提前感谢您的回答!
回答您的问题-
- 不,没有 returns 如果元素不存在则为 true 的函数。您可以检查现有
isDisplayed()
方法的否定(假)条件。您可以将各种测试框架与 webdriverjs 一起使用,并执行错误断言,如 jasmine、mocha 等...How to use webdriverjs with Mocha and testing with jasmine
- 如果你想检查是否显示了多个元素,那么你可以使用像
.each()
or .map()
or .reduce()
这样的内置循环(仅当你有多个元素可以使用单个定位器时才适用)或者你必须检查他们单独。
希望对您有所帮助。
我展示了我是如何解决这个问题的,使用 jasmine
,以防将来有人需要它:
driver.findElement(webdriver.By.css('.element')).isDisplayed()
.then(function(displayed) {
expect(displayed).not.toBe(true);
});
isDisplayed() works well when used on a single element. Is there a
similar way to check if multiple elements are displayed?
这可以通过使用 map()
来解决。示例:
element.all(by.css(".element")).map(function (elm) {
return elm.isDisplayed();
});
这将 return 一个 promise 解析为一个布尔值数组。
如果你想要一个单一的布尔值,你可以使用reduce()
:
element.all(by.css(".element")).reduce(function (acc, elm) {
return elm.isDisplayed().then(function (isDisplayed) {
return isDisplayed && acc;
});
}, false);
我发现此解决方案有效。代码评估元素的存在和 return 真或假。然后我可以评估这个值并在页面上执行其他操作。
仍然有一些小错误:无法创建着色器缓存条目:-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)
})
};
`
使用 selenium
和 webdriverJS
我想创建一个测试来检查页面上是否未显示某个元素。为了检查一个或多个元素是否存在,我决定使用 isDisplayed()
函数:
driver.findElement(webdriver.By.css('.element')).isDisplayed();
- 你知道 returns
true
if the elements if the elements if the elements if the element NOT displayed? 类似的函数吗?
isDisplayed()
在单个element
上使用时效果很好。有没有类似的方法来检查是否显示了多个元素?
提前感谢您的回答!
回答您的问题-
- 不,没有 returns 如果元素不存在则为 true 的函数。您可以检查现有
isDisplayed()
方法的否定(假)条件。您可以将各种测试框架与 webdriverjs 一起使用,并执行错误断言,如 jasmine、mocha 等...How to use webdriverjs with Mocha and testing with jasmine - 如果你想检查是否显示了多个元素,那么你可以使用像
.each()
or.map()
or.reduce()
这样的内置循环(仅当你有多个元素可以使用单个定位器时才适用)或者你必须检查他们单独。
希望对您有所帮助。
我展示了我是如何解决这个问题的,使用 jasmine
,以防将来有人需要它:
driver.findElement(webdriver.By.css('.element')).isDisplayed()
.then(function(displayed) {
expect(displayed).not.toBe(true);
});
isDisplayed() works well when used on a single element. Is there a similar way to check if multiple elements are displayed?
这可以通过使用 map()
来解决。示例:
element.all(by.css(".element")).map(function (elm) {
return elm.isDisplayed();
});
这将 return 一个 promise 解析为一个布尔值数组。
如果你想要一个单一的布尔值,你可以使用reduce()
:
element.all(by.css(".element")).reduce(function (acc, elm) {
return elm.isDisplayed().then(function (isDisplayed) {
return isDisplayed && acc;
});
}, false);
我发现此解决方案有效。代码评估元素的存在和 return 真或假。然后我可以评估这个值并在页面上执行其他操作。 仍然有一些小错误:无法创建着色器缓存条目:-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)
})
};
`