[英]Wait until an element becomes visible using selenium-webdriver and PjantomJS
[英]Selenium-webdriver (Java Script) wait for element to disappear
driver.wait(until.elementIsPresent(By.css(".popup-backdrop fade")), 15000);
我该如何做相反的事情? 我想等到“.popup-backdrop fade”覆盖消失,然后再单击一个元素。
我正在使用 Selenium-webdriver(使用 Javascript 而不是使用 Java 或 Python 或 C#)
没有在代码源中找到负面等待。 解决方案是实现自己的条件:
var webdriver = require('selenium-webdriver');
var until = webdriver.until;
var By = webdriver.By;
until.elementIsNotPresent = function elementIsNotPresent(locator) {
return new until.Condition('for no element to be located ' + locator, function(driver) {
return driver.findElements(locator).then(function(elements) {
return elements.length == 0;
});
});
};
driver.wait(until.elementIsNotPresent(By.css(".popup-backdrop fade")), 15000);
这是问题的另一个解决方案,更内联(但是它有效,而不是与“TypeError:until.Condition不是构造函数”崩溃的已接受答案):
await this._webDriver.wait(() => {
return this._webDriver.findElements(By.id('loadingIndicator')).then(function(found) {
return found.length === 0;
});
}, 3000, 'The element should disappear');
您也可以尝试以下方法:
let faderElement = webdriver.By.css('.fader');
driver.wait(webdriver.until.elementLocated(faderElement));
let faderElementFound = driver.findElement(faderElement);
driver.wait(webdriver.until.elementIsVisible(faderElementFound));
driver.wait(webdriver.until.elementIsNotVisible(faderElementFound));
如对已接受问题的评论所示,until.Condition不是Selenium 4中的有效构造函数。相反,可以这样做:
const { By, until, Condition } = require('selenium-webdriver');
until.elementIsNotPresent = function elementIsNotPresent(locator) {
return new Condition('for no element to be located ' + locator, function(driver) {
return driver.findElements(locator).then(function(elements) {
return elements.length === 0;
});
});
};
可以在此处找到使用Condition的参考: https : //github.com/seleniumhq/selenium/issues/2755
看起来elementIsNotVisible
已被添加到until
的答案给出之后。 我正在使用 selenium webdriver 4.0.0-beta.3
一探究竟:
const timeout = 60 * 1000; // 60 seconds
const element = await driver.findElement(By.id(elementId));
// this is the important line
await driver.wait(until.elementIsNotVisible(element), timeout);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.