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>
629   2  

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

    Ничего не найдено.