Selenium webdriver нажмите vs action.- а какая разница?
Я боролся с всплывающим диалогом на веб-сайте, который я автоматизирую, по какой-то причине он не нажимал кнопку в диалоге, но нормально взаимодействовал со всем остальным. Он также идентифицировал кнопку без проблем, и я мог видеть, когда наблюдал за его запуском, что он, казалось, нажимал кнопку, когда цвет менялся, поэтому я немного застрял.
Мой код изначально выглядел довольно очевидным: -
WebElement targetElement = waitforElement(threadSesh);
targetElement.click();
Но когда я изменил его на следующий, все, казалось, работало абсолютно отлично!
WebElement targetElement = waitforElement(threadSesh);
Actions action = new Actions(threadSesh.driver);
action.click(targetElement);
action.perform();
Может ли кто-нибудь сказать мне, почему один метод не работает, в то время как другой работает нормально? Кроме того, помогает это или нет, сайт построен с использованием Twitter bootstrap, если это имеет какое-либо значение, но сама кнопка была довольно простой, вот так.
<div class="modal hide fade in" style="width: 481px; margin-left: -241px; padding: 15px; display: block;" role="dialog" data-backdrop="static" data-keyboard="false" aria-hidden="false">
...
<div class="modal-footer">
<a id="save-EditDetails" class="btn btn-small btn-info" type="button" style="margin-right: 7px; padding-left: 15px; padding-right: 15px;" data-bind="click: ok" href="#">Save</a>
</div>
</div>
2 ответов:
Я не уверен в вашем конкретном случае,но есть несколько различий между WebElement click method и Actions click method. Щелчок действия намного глупее, он в значительной степени просто отправляет событие щелчка в элемент (местоположение), который вы передаете. Он не заботится об элементе, он просто делает щелчок и движется вперед, в то время как WebElement click является блокирующим вызовом (не всегда, проверьте ссылки), и у него также есть предварительные условия, такие как WebElement, который должен быть нажат, должен быть виден. Кроме того, webelements ' click-это метод void, actions click возвращает ссылку на используемые вами действия. Для получения дополнительной информации проверьте здесь и здесь.
Правка. Глядя на разметку, которую вы разместили, и это может быть совершенно неправильно, так как я не босс по bootstrap CSS, часть
modal hide fade inи особенно частьfade inтам выглядит подозрительно. Вы уверены, что при отправке webelement.click (), ваш элемент находится в кликабельном состоянии? Что же происходит? Ничего? Тогда опять же, если действия click надежно работает, почему бы просто не пойти с ним, я имею в виду, если что-то работает, зачем это исправлять?
Просто тестирую подобный сценарий. Сначала с действиями нажмите
actions.moveToElement(driver.findElement(By.xpath("//*[@id='relevantJobsAndCareerUpdates_1']"))).click().perform()И второй с WebElement click
driver.findElement(By.xpath("//*[@id='relevantJobsAndCareerUpdates_1']"))).click()Второй не работает. Он выдает сообщение об ошибке: Первопричина: орг.опенка.селен.WebDriverException: неизвестная ошибка: элемент не кликабелен в точке (307, 24). Другой элемент получит щелчок:...
Это та же проблема, что и предыдущая. Использование действий решает эту проблему.
Comments