Javascript SeleniumWebDriver(Java脚本)等待元素消失
我该怎么做呢?我想等到“.popup background fade”覆盖消失后再单击元素Javascript SeleniumWebDriver(Java脚本)等待元素消失,javascript,selenium-webdriver,Javascript,Selenium Webdriver,我该怎么做呢?我想等到“.popup background fade”覆盖消失后再单击元素 我使用的是SeleniumWebDriver(使用Javascript,而不是Java、Python或C#))在源代码中没有找到负等待。解决方案是实施您自己的条件: driver.wait(until.elementIsPresent(By.css(".popup-backdrop fade")), 15000); 您也可以尝试以下方法: var webdriver = require('seleniu
我使用的是SeleniumWebDriver(使用Javascript,而不是Java、Python或C#))在源代码中没有找到负等待。解决方案是实施您自己的条件:
driver.wait(until.elementIsPresent(By.css(".popup-backdrop fade")), 15000);
您也可以尝试以下方法:
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不是构造函数”而崩溃):
如对已接受问题的评论所示,until.Condition在Selenium 4中不是有效的构造函数。相反,我们可以这样做:
await this._webDriver.wait(() => {
return this._webDriver.findElements(By.id('loadingIndicator')).then(function(found) {
return found.length === 0;
});
}, 3000, 'The element should disappear');
有关使用条件的参考可在此处找到:
请解释此代码是如何实现OP要求的功能的。代码在某种程度上是不言自明的,但是:前4行确保找到并看到音量控制器。很多时候,音量控制器无法立即显示或识别,这就是为什么会等待元素定位,然后才显示。只有到了第五行,我们才会等待元素淡出或消失。如果说音量控制器确实隐藏了一个按钮,那么现在该按钮可以点击了。从selenium 4开始,
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');
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;
});
});
};