Как правильно ждать с Selenium до прокрутки списка? - PullRequest
1 голос
/ 30 октября 2019

Я написал код Selenium (в Javascript) для автоматической прокрутки списка вниз с помощью клавиши «Вниз» на клавиатуре. Я знаю, что вы можете легче прокручивать с помощью команды Javascript, но я хочу сделать это с помощью клавиши «Вниз».

Пока это мой код:

  let list = await this.driver.wait(until.elementLocated(By.css('#scrollableList')), 2000);

  // the list is not scrolled in the beginning:
  let scrolledY = await this.driver.executeScript('return arguments[0].scrollTop;', list);
  await assert.deepEqual(scrolledY, 0);

  // clicking on the list and pressing the "Down"-Key multiple times to scroll down
  await this.driver.actions({
    bridge: true
  }).click(list).perform();
  await this.driver.actions({
    bridge: true
  }).keyDown(Key.DOWN).keyUp(Key.DOWN).keyDown(Key.DOWN).keyUp(Key.DOWN).keyDown(Key.DOWN).keyUp(Key.DOWN).perform();

  // This is what I need so that the following assert return true:
  await sleep(100);

  // check if it is successfully scrolled down:
  scrolledY = await this.driver.executeScript('return arguments[0].scrollTop;', list);
  await assert.ok(scrolledY > 0);

Моя проблема:Он успешно прокручивается вниз (когда я оставляю программу в спящем режиме в течение 10 секунд, я ясно вижу это). Но мне нужна строка await sleep(100);, чтобы подождать пару миллисекунд. В противном случае последнее утверждение возвращает, что это не сработало. Почему это так и как я могу заставить его работать без команды sleep?

1 Ответ

0 голосов
/ 01 ноября 2019

попробуйте этот код. Вам не нужно ничего добавлять. просто замените свой ожидающий сон этим кодом.

        int timeOutInSeconds = 5;
        ExpectedCondition<Boolean> expectation = new ExpectedCondition<Boolean>() {
            public Boolean apply(WebDriver driver) {
                return ((JavascriptExecutor) driver).executeScript("return document.readyState").equals("complete");
            }
        };
            WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds);
            wait.until(expectation);
...