Я использую Selenium и сталкиваюсь со следующей проблемой:
По сути, на странице есть всплывающее окно, которое появляется после нажатия кнопки на странице.Я хочу отклонить всплывающее окно.Для этого я нажимаю на значок x в правом верхнем углу.Я могу правильно идентифицировать элемент и щелкнуть по нему с помощью XPath (я знаю, что XPath верный, потому что он работает в Firebug, и Selenium не выдает никаких исключений при использовании XPath, поэтому элемент должен присутствовать. Кроме того, оба isDisplayed()
и isEnabled()
вернет истину).Самое смешное, что после этого всплывающее окно не исчезает.Однако, если я добавлю 3-секундную задержку (до закрытия всплывающего окна), всплывающее окно исчезнет.Моя проблема в том, что я не хочу задерживать выполнение программы больше, чем необходимо, поэтому я бы предпочел использовать максимальную задержку в 3-5 секунд, но если всплывающее окно готово к взаимодействию (то есть, отклонено), я хочу отклонитьэто как можно скорее.
Я думал об использовании чего-то вроде:
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
Но это не работает, поскольку заявлено, что драйвер обнаруживает веб-элемент как присутствующий (и видимый и отображаемый) немедленно, но щелчок не будет работать, если я не подожду 3 секунды.
Аналогично, я не могу использовать:
WebDriverWait wait = new WebDriverWait(driver, 30, 5000);
wait.until(ExpectedConditions.elementToBeClickable(element));
по той же причине (это будет работать, только если указанный элемент не былкликабельный / видимый до 3 секунд, но что касается WebDriver
- он виден сразу)
Может кто-нибудь помочь мне понять, почему, несмотря на наличие элемента факта, клик не удался и как я могу сделатьэто так, что Selenium щелкает, как только щелчок будет успешным, не дожидаясь полных 3-5 секунд.
HTML:
<div class="a-popover-wrapper">
<div class="a-popover-header">
<button class=" a-button-close a-declarative" aria-label="Close" data-action="a-popover-close">
<i class="a-icon a-icon-close"/>
</button>
<h4 id="a-popover-header-7" class="a-popover-header-content">Buy professional installation</h4>
</div>
<div id="a-popover-content-7" class="a-popover-inner pdp-service-modal-instance" style="height: auto; overflow-y: auto;">
</div>
<span class="a-popover-end a-popover-a11y-offscreen" tabindex="0"/>
</div>
Спасибо!