Селен - как ждать?
Мне нужно быть в состоянии ждать одной из нескольких вещей, которые могут произойти со страницей после выполнения определенного действия. Примерами этих вещей являются: изменение URL, задание определенного заголовка, отображение определенного содержимого на странице и т. Д.
Это объясняет, как ждать - https://github.com/facebook/php-webdriver/wiki/HowTo-Wait. Тем не менее, я должен иметь возможность ждать несколько вещей одновременно. Я хочу, чтобы ожидание прекратилось, когда произойдет одно из условий.
Есть ли способ "или" во время ожидания (например, ждать, пока URL изменится, ИЛИ заголовок содержит "foo" ИЛИ "полоса" появляется на странице и т. Д.)?
1 ответ
В той же ссылке, которую вы разместили, найдите раздел "Пользовательские условия", а именно:
$driver->wait()->until(
function () use ($driver) {
$elements = $driver->findElements(WebDriverBy::cssSelector('li.foo'));
return count($elements) > 5;
},
'Error locating more than five elements'
);
Обратите внимание на использование "findElements" в примере кода. Если ничего не найдено, будет возвращен пустой массив. Если должен быть виден только один из трех элементов, вы делаете что-то вроде:
$driver->wait()->until(
function () use ($driver) {
$elements1 = $driver->findElements(WebDriverBy::cssSelector('li.foo1'));
$elements2 = $driver->findElements(WebDriverBy::cssSelector('li.foo2'));
$elements3 = $driver->findElements(WebDriverBy::cssSelector('li.foo3'));
return count($elements1) + count($elements2) + count($elements3) > 0;
},
'Error locating at least one of the elements'
);