Селен ждет элемента, чтобы стать видимым - PullRequest
0 голосов
/ 05 июня 2019

Я новичок в селене, и у меня возникают проблемы с ожиданием, пока элемент станет видимым.

элемент, который отображается после ввода неверных учетных данных, выглядит следующим образом:

<div class="jss357">User with that username does not exist</div>

async function loginFailure(driver) {
    try {
      await driver.get('WEBSITE')
      await driver.findElement(By.name('username')).sendKeys(usernameBad)
      await driver.findElement(By.name('password')).sendKeys(passwordBad)
      await driver.findElement(By.css("button[type='submit']")).click()
      let elm = await driver.findElement(By.xpath("//div[contains(.,'User 
with that username does not exist')]"))
      await driver.wait(until.elementIsVisible(elm))
    } catch(e) {
      console.error('loginFailure failed.error: ', e.message)
    }
    finally {
        console.log('loginFailure finished')
    }
  }

loginFailure failed.error: нет такого элемента: невозможно найти элемент: {"method": "xpath", "selector": "// div [содержит (., 'Пользователя с таким именем пользователя не существует')]"}

Ответы [ 3 ]

0 голосов
/ 06 июня 2019

Я использую Java, но у вас должен быть похожий синтаксис

wait.until(elementAvailable(By.className("jss357")));

--- пересмотреть этот ответ. Мне любопытно, если вы немного измените его, и, прежде чем присваивать значение elm, дождитесь присутствия элемента. Я думаю, что вы получаете ошибку, потому что при первоначальном присвоении html-элемента переменной его еще нет на странице. Вам, возможно, придется четко заявить об ожидании его присутствия.

Так будет примерно так:

wait.until(elementAvailable(By.xpath("//div[contains(.,'User with that username does not exist')]"));
let elm = driver.findElement(By.xpath("//div[contains(.,'User with that username does not exist')]"))
0 голосов
/ 06 июня 2019

Я полагаю, ваш локатор неверен, потому что ошибка говорит "нет такого элемента: невозможно найти элемент", не знаю, зачем это нужно. до ожидаемого текста. Вы можете сделать поиск по точному тексту, а не только содержит.

Ваш локатор должен быть -

driver.findElement(By.xpath("//div[text() = 'User with that username does not exist']"))

Если это не поможет, просьба ответить.

0 голосов
/ 06 июня 2019

Попробуйте это,

let el = await driver.findElement ("ByLocator_Here");

await driver.wait (пока .elementIsVisible (el), 100);

Кроме того, ознакомьтесь с документами seeleniumhq здесь. https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/lib/until.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...