#javascript #testing #wdio-v6
Вопрос:
describe("Purge all", function() {
it('Purge all', () => {
CachePurgePage.open(PARTNER_ID, ACCOUNT_ID, CONFIGURATION_ID);
const label = $('[class = "css-1av0y7f-SidebarLinkTitle ezsph7p1"]');
browser.waitUntil(function(){
return label.isClickable()
}, 6000, "Element is not clickable");
label.click();
browser.waitUntil(function(){
return $('[class ="css-1rqefwa-LabelOutput e9gmw1r4"]')[1].isDisplayed();
}, 6000, "Element is not displayed")
$('[class ="css-1rqefwa-LabelOutput e9gmw1r4"]')[1].click();
browser.waitUntil(function(){
return $('[class *= "Row-StyledTableRow"]')[1].isDisplayed();
}, 6000, "Element is not clickable")
const firstTR = CachePurgePage.tableTasksInfo[0];
const internalTDs = firstTR.$('[class = "css-zr137n-Cell eveacmn0"]');
expect(internalTDs[1]).toHaveText('2');
Всем привет! Мой первый тест WDIO, и нетрудно понять, что я в нем новичок. Итак, я столкнулся с интересной проблемой. Тест работает нормально, когда я использую browser.pause (), но если я только попытаюсь реализовать $element.waitForClickable().нажмите (), что-то пойдет не так. Тест не ждет условий и все равно пытается найти элемент, а затем нажимает на него. Конечно, он ничего не находит, потому что нужная страница еще не загружена, и просто нажимает элемент «не определить», что приводит к завершению теста с ошибкой. Поэтому я попробовал browser.waitUntil (), и произошло несколько неожиданных шагов. Сначала браузер ищет «label = $(‘[class = «css-1av0y7f-SidebarLinkTitle ezsph7p1″]»)», а затем нажимает на него. Вывод терминала говорит, что все в порядке. Затем начинает поиск «$$(‘[class =»css-1rqefwa-LabelOutput e9gmw1r4″]’)[1]» и не может найти его, потому что IRL щелчок() по предыдущему элементу не произошел. Я не могу понять, почему это так работает. У меня есть 94 chromedriver, 7,14 wdio и 14 node.js и попробовал его на 85 chromedriver, 6,7 wdio и 12 node.js здесь нет никаких различий
Ответ №1:
Проверьте примеры здесь: https://webdriver.io/docs/api/browser/waitUntil/
Вы заметите, что вам не хватает async/await
обозначений.
В основном browser.waitUntil
возвращает a Promise()
, которое вы просто игнорируете.
с момента синхронизации NodeJS v16. режим устарел:
Попробуйте это:
describe("Purge all", function() {
it('Purge all', async () => {
CachePurgePage.open(PARTNER_ID, ACCOUNT_ID, CONFIGURATION_ID);
const label = $('[class = "css-1av0y7f-SidebarLinkTitle ezsph7p1"]');
await browser.waitUntil(function(){
return label.isClickable()
}, 6000, "Element is not clickable");
label.click();
await browser.waitUntil(function(){
return $('[class ="css-1rqefwa-LabelOutput e9gmw1r4"]')[1].isDisplayed();
}, 6000, "Element is not displayed")
$('[class ="css-1rqefwa-LabelOutput e9gmw1r4"]')[1].click();
await browser.waitUntil(function(){
return $('[class *= "Row-StyledTableRow"]')[1].isDisplayed();
}, 6000, "Element is not clickable")
const firstTR = CachePurgePage.tableTasksInfo[0];
const internalTDs = firstTR.$('[class = "css-zr137n-Cell eveacmn0"]');
expect(internalTDs[1]).toHaveText('2');
//...
Комментарии:
1. да, я пробовал асинхронное/ожидание, и это не помогает. Теперь в браузере мой метод open не работает
open(partnerID, accountID, configID) { browser .$('[id = "react-select-5-input"]') .setValue(
${configID}); browser.pause(2000); driver.keys('Enter'); };
2. driver.keys («Ввод») не выполняется в браузере, но терминал говорит, что все в порядке
3. @ПавелРодин возможно, вы захотите изучить больше методов, требующих ожидания. Даже внутри
.waitUntil()
метода. Вы также можете увидеть это в примере. Попробуйте немного поиграть сasync/await
4. Внес исправления в мой код. Уэйтс работает, но программа не может выйти из первого
const label = await $('[class = "css-1av0y7f-SidebarLinkTitle ezsph7p1"]'); await browser.waitUntil(async function(){ await label.isDisplayed(); }, 8000, "Element is not displayed"); await label.click()
терминала после нахождения элемента команды findElement(«CSS-селектору», «[класс = «УСБ-1av0y7f-SidebarLinkTitle ezsph7p1″]») результат { ‘элемент-6066-11e4-a52e-4f735466cecf’: ‘элемент-11’ } начинается spaming сообщения команды executeScript(<fn>, <object>) РЕЗУЛЬТАТ верен