Selenium-webdriver(Java Script)等待元素消失

SUM*_*SUM 7 javascript selenium-webdriver

driver.wait(until.elementIsPresent(By.css(".popup-backdrop fade")), 15000);
Run Code Online (Sandbox Code Playgroud)

我该如何做相反的事情?我想等到“.popup-backdrop fade”覆盖消失,然后再单击一个元素。

我正在使用 Selenium-webdriver(使用 Javascript 而不是使用 Java 或 Python 或 C#)

Flo*_* B. 5

在代码源中没有找到负等待。一个解决方案是实现你自己的条件:

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);
Run Code Online (Sandbox Code Playgroud)


小智 5

正如对已接受问题的评论所示,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;
    });
  });
};
Run Code Online (Sandbox Code Playgroud)

使用条件的参考可以在这里找到: https: //github.com/seleniumhq/selenium/issues/2755