5

在采取特定操作后,我需要能够等待页面可能发生的多种事情之一。这些事情的示例是:URL 更改、设置了某个标题、页面上出现了某些内容等。

这解释了如何等待 - https://github.com/facebook/php-webdriver/wiki/HowTo-Wait。但是,我需要能够同时等待多个事情。一旦出现其中一种情况,我希望停止等待。

有没有办法在等待期间“或”(例如等待 URL 更改标题包含“foo”“bar”出现在页面上等)?

4

1 回答 1

6

在您发布的同一链接中,查找“自定义条件”部分,即:

$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'
);
于 2017-06-18T22:38:52.647 回答