我的方案
我的代码
exports.checkButton = function (driver) {
driver.findElement(By.css(".btn.btn-danger.pull-right.remove-promotion")).then(function(button){
if (button.isDisplayed()) {
console.log("Displaying");
} else {
console.log("not displayed");
}
});
我的问题
如果未显示该元素,则不会显示消息console.log("not displayed");
并且我收到错误消息:
Uncaught NoSuchElementError: no such element: Unable to locate element: {"method":"css selector","selector":".btn.btn-danger.pull-right.remove-promotion"}
答案 0 :(得分:1)
isDisplayed()
只能在DOM中存在元素时使用,但必须隐藏(例如,包含style="display: none"
)。
我认为,在你的情况下,当元素没有显示时,元素不存在于DOM中,这就是你得到异常NoSuchElementError的原因。
请尝试:
export.checkButton = function (driver) {
driver.findElement(By.css(".btn.btn-danger.pull-right.remove-promotion")).then(function(button){
console.log("Displaying");
button.click();
return true;
}).catch(function (ex) {
console.log("not displayed");
return false;
});
}
var display = checkButton(driver);
while (display) {
display = checkButton(driver);
}
注意:您应首先检查DOM以查看它在两种情况下的行为 - 当元素存在且不存在时。
答案 1 :(得分:0)
如果要确保显示元素,首先需要确保它实际存在于DOM中。在Java中,您可以这样检查:
public boolean isElementPresentInDom(By by) {
driver.manage().timeouts().implicitlyWait(0, TimeUnit.MILLISECONDS);
boolean isElementPresent = (driver.findElements(by).size() != 0);
driver.manage().timeouts().implicitlyWait(driverTimeOut, TimeUnit.MILLISECONDS); // I have a driverTimeOut variable, I set the default timeout to zero in the beginning of this method to make it fast, then I set it to my driverTimeOut again. I recommend you to do the same :)
return isElementPresent;
}
(不知道如何在Javascript中完全翻译它,但你有主要想法。)
如果此方法返回true
,则可以检查是否显示了元素。
答案 2 :(得分:0)
使用.isDisplayed()
假设元素存在。您收到该错误,因为该元素不存在。您的定位器已关闭或元素可能尚未加载,等等。使用.findElements()
(复数)并确保大小为> 0来查看元素是否存在。理想情况下,您可以将其包装在函数中并在需要时使用它。确定元素存在后,然后检查.isDisplayed()
,代码应该有效。