#javascript #selenium #vue.js
#javascript #селен #vue.js
Вопрос:
Я пытаюсь разработать автоматический тест в одностраничном приложении, использующем VueJS, когда я нажимаю на кнопку регистрации, страница загружает форму с элементами, но поскольку элементы загружаются по мере необходимости, они не присутствуют там автоматически, я могу решить проблему, установив driver.sleep после кнопки регистрациинажат, но я искал обходной путь, я пробовал ImplicitWaits и elementIsEnabled, но я не смог получить результаты, проверьте мой код здесь:
const { Builder, By, Key, until } = require(‘selenium-webdriver’)
асинхронная функция teste() {
const driver = await new Builder().forBrowser('chrome').build()
await driver.get('https://dez.dev.dav.med.br/login')
let element = (By.xpath('//*[contains(text(), "Faça seu cadastro")]'))
let query = await robo(element,driver)
await query.click()
await driver.sleep(2000)
element = (By.xpath('//*[contains(@title, "Nome")]'))
query = await robo(element, driver)
await query.sendKeys("VictorTesteRobo2")
element = (By.xpath('//input[contains(@title, "CPF")]'))
query = await robo(element, driver)
await query.sendKeys("11043017844")
element = (By.xpath('//*[contains(@class,"v-select__selections")]'))
query = await robo(element, driver)
await query.click()
element = (By.xpath('//*[contains(text(),"Masculino")]'))
query = await robo(element, driver)
await query.click()
element = (By.xpath('//*[contains(@title, "Data de Nascimento")]'))
query = await robo(element, driver)
await query.sendKeys("06031997")
element = (By.xpath('//*[contains(@title, "E-mail")]'))
query = await robo(element, driver)
await query.sendKeys("teste@email.com")
element = (By.xpath('//*[contains(@title, "Celular")]'))
query = await robo(element, driver)
await query.sendKeys("11995841105")
element = (By.xpath('//*[contains(text(), "Próximo")]'))
query = await robo(element, driver)
await query.click()
element = (By.xpath('//*[contains(text(), "Aceito e Cadastre-me")]'))
query = await robo(element, driver)
await query.click()
}
teste()
асинхронная функция robo (элемент, драйвер, ТАЙМ-АУТ = 10000) {
const locator = await driver.wait(until.elementLocated(element, TIMEOUT))
const query = await driver.wait(until.elementIsVisible(locator, TIMEOUT))
return query
}
Комментарии:
1. является интерактивным. Найдите этот сайт с помощью кликабельности, и вы найдете решение
2. Похоже, что библиотека Selenium в Js не имеет функции isClickable
Ответ №1:
Это решение Java.
public boolean ElementIsClickable(WebElement webElem)
{
try
{
WebDriverWait wait = new WebDriverWait(driver, 5);
wait.until(ExpectedConditions.elementToBeClickable(webElem));
return true;
}
catch (Exception e)
{
return false;
}
}
Пожалуйста, сделайте то же самое с JS.
var el = драйвер.подождите(пока.elementLocated(By.id (‘кнопка’))); эл.щелчок();
Комментарии:
1. В документе Selenium js нет необходимости ждать, пока элемент станет интерактивным. ссылка: selenium.dev/selenium/docs/api/javascript/index.html