Javascript SeleniumWebDriver(Java脚本)等待元素消失

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

我该怎么做呢?我想等到“.popup background fade”覆盖消失后再单击元素


我使用的是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;
    });
  });
};