Я пишу автоматизацию web-драйвера с использованием JavaScript для тестирования веб-приложения. У меня есть код, который выглядит следующим образом:
var selenium = require('selenium-webdriver');
By = selenium.By;
until = selenium.until;
driver = new selenium.Builder().
withCapabilities(selenium.Capabilities.chrome()).
build();
getItems = async function() {
try {
var itemsXpath = '[xpath expression]';
var items = await driver.findElements(By.xpath(itemsXpath));
console.log(items.length + ' items found');
...
}
catch(err) {
console.log(err);
}
}
Это успешно. Однако, если я заменю строку await
на:
var items = await driver.wait(until.elementsLocated(By.xpath(itemsXpath)),60000);
, она не будет выполнена должным образом. Ни следующий console.log()
, ни тот, что в блоке catch()
, не отображается.
После прочтения документации у меня сложилось впечатление, что если на странице есть элементы, которые соответствуютВ локаторе XPath любая из этих функций будет работать и возвращать элементы. Однако, если бы элементов не было на странице, вторая формулировка ожидала бы их появления (в данном случае до 60000 мс).
Обратите внимание, что второй способ написания этого не работает, дажеесли элементы уже находятся на экране во время вызова getItems()
. Кроме того, программа завершается за меньшее время, чем время ожидания, указанное в driver.wait()
.
Есть ли что-то, что я неправильно поняла о том, как это работает, так что такое поведение действительно имеет смысл? Если да, может кто-нибудь прояснить, что здесь происходит?