Selenium - 如何等待?
Selenium - How to Wait?
我需要能够等待在采取特定操作后页面可能发生的多种事情之一。这些事情的例子有:URL 变化、设置了某个标题、页面上出现了某些内容等
这解释了如何等待 - https://github.com/facebook/php-webdriver/wiki/HowTo-Wait。但是,我需要能够同时等待多件事。我希望在其中一种情况发生时停止等待。
有没有办法在等待期间 "or"(例如等待 URL 更改 或 标题包含 "foo" OR "bar"出现在页面等)?
在您发布的同一个 link 中,查找 "Custom conditions" 部分,即:
$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'
);
我需要能够等待在采取特定操作后页面可能发生的多种事情之一。这些事情的例子有:URL 变化、设置了某个标题、页面上出现了某些内容等
这解释了如何等待 - https://github.com/facebook/php-webdriver/wiki/HowTo-Wait。但是,我需要能够同时等待多件事。我希望在其中一种情况发生时停止等待。
有没有办法在等待期间 "or"(例如等待 URL 更改 或 标题包含 "foo" OR "bar"出现在页面等)?
在您发布的同一个 link 中,查找 "Custom conditions" 部分,即:
$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'
);