如何在Selenium WebDriver中检测并等待叠加?

时间:2015-05-20 21:52:55

标签: php selenium selenium-webdriver webdriver

页面顶部有一个微调器覆盖层,我必须等待它完成加载。它消失后,我可以点击元素。但是,当我执行测试以查看元素是否可点击时,它总是返回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

并得到了这个

  

查找状态有效
  PHP致命错误:C:\ Users \ finance.operations \ Desktop \ Teads \ php-webdriver \ lib \ WebDriverWait.php:69

中未捕获的异常'TimeOutException'

1 个答案:

答案 0 :(得分:2)

从不同角度查看问题 - 等待微调器叠加层不再使用WebDriverExpectedCondition::stalenessOf附加到DOM或使用WebDriverExpectedCondition::invisibilityOfElementLocated隐藏。

使用哪种预期条件取决于微调器之后发生的情况 - 它是从DOM中完全删除还是只是变得不可见。