Как обнаружить и дождаться наложения в Selenium 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: необработанное исключение «TimeOutException» в C: \ Users \ finance.operations \ Desktop \ Teads \ php-webdriver \ lib \ WebDriverWait.php: 69

1

Решение

Посмотрите на проблему под другим углом — подождите, пока оверлейный диск больше не будет прикреплен к DOM, используя WebDriverExpectedCondition::stalenessOf или быть невидимым, используя WebDriverExpectedCondition::invisibilityOfElementLocated,

Какое ожидаемое условие использовать зависит от того, что происходит с вертушкой после — полностью ли оно удаляется из DOM или просто становится невидимым.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]