簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM