页面顶部有一个微调器覆盖层,我必须等待它完成加载。它消失后,我可以点击元素。但是,当我执行测试以查看元素是否可点击时,它总是返回true。我必须手动添加一个硬编码的等待时间让微调器消失。问题是它非常脆弱且不确定。有时它需要比硬编码时间更长的时间并产生错误。当然,当它花费的时间较少时,它仍然需要等待并且非常慢并且浪费时间。这是代码:
echo "Finding Advanced\n";
$driver->wait(10)->until( WebDriverExpectedCondition::elementToBeClickable( WebDriverBy::partialLinkText('Advanced') ) );
sleep(3); // spinner
$driver->findElement(WebDriverBy::partialLinkText("Advanced"))->click();
当微调器覆盖时间超过预期时,这是错误消息:
Finding Advanced
PHP Fatal error: Uncaught exception 'UnknownServerException' with message 'unknown error: Element is not clickable at point (89, 127). Other element would receive the click: <div id="socialLoader" class="overlay" style="display: block; left: 0px; right: 0px; top: 0px; bottom: 0px; position: absolute;">...</div>
(Session info: chrome=42.0.2311.152)
(Driver info: chromedriver=2.14.313457 (3d645c400edf2e2c500566c9aa096063e707c9cf),platform=Windows NT 6.3 x86_64) (WARNING: The server did not provide any stacktrace information)
我尝试了以下
$driver->findElement(WebDriverBy::cssSelector('button.xBtn.remove'))->click();
sleep(1); // spinner
echo "Finding Advanced\n";
$driver->wait(10)->until( WebDriverExpectedCondition::invisibilityOfElementLocated( WebDriverBy::id('socialLoader') )); // spinner
$driver->findElement(WebDriverBy::partialLinkText("Advanced"))->click();
并得到了这个
寻找高级版 PHP致命错误:未捕获异常'UnknownServerException',消息'未知错误:元素在点(89,127)处无法点击。其他元素会收到点击:...
我试过这个
// sleep(1); // spinner
echo "Finding Status Active\n";
$driver->wait(10)->until( WebDriverExpectedCondition::elementToBeClickable( WebDriverBy::id('socialLoader') ) );
$driver->wait(10)->until( WebDriverExpectedCondition::invisibilityOfElementLocated( WebDriverBy::id('socialLoader') )); // spinner
并得到了这个
查找状态有效
中未捕获的异常'TimeOutException'
PHP致命错误:C:\ Users \ finance.operations \ Desktop \ Teads \ php-webdriver \ lib \ WebDriverWait.php:69
答案 0 :(得分:2)
从不同角度查看问题 - 等待微调器叠加层不再使用WebDriverExpectedCondition::stalenessOf
附加到DOM或使用WebDriverExpectedCondition::invisibilityOfElementLocated
隐藏。
使用哪种预期条件取决于微调器之后发生的情况 - 它是从DOM中完全删除还是只是变得不可见。