Селен - как ждать?

Мне нужно быть в состоянии ждать одной из нескольких вещей, которые могут произойти со страницей после выполнения определенного действия. Примерами этих вещей являются: изменение 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'
);
Другие вопросы по тегам