Может ли экшен-строитель решить обнаруженные элементы?
В настоящее время, и часто у меня есть элементы на странице, которые становятся видимыми при наведении курсора.
Конструктор действий звучал многообещающе, но, похоже, требует элементов, найденных заранее, а не во время операции.
Это не сработает...
page.driver.browser.action.
move_to(find(:xpath, './/span[text()="Test"]')).
move_to(find(:xpath, ".//span[text()="Test"]]/../a[@title="Hidden Thing to click"]')).
click(find(:xpath, ".//span[text()="Test"]]/../a[@title="Hidden Thing to click"]')).
perform
и предварительные назначения потерпят неудачу для тех элементов, которые скрыты
elem1 = find(:xpath, './/span[text()="Test"]') #ok
elem2 = find(:xpath, ".//span[text()="Test"]]/../a[@title="Hidden Thing to click"]') #ElementNotFound
page.driver.browser.action.
move_to(elem1).
move_to(elem2).
click(elem2).
perform
Возможно, реальный вопрос - это верный способ найти этот JavaScript, который на некоторых страницах хорошо спрятан.
Мысли?
2 ответа
Ли капибара hover
метод не работает для вас?
find(:xpath, './/span[text()="Test"]').hover
find(:xpath, ".//span[text()="Test"]]/../a[@title="Hidden Thing to click"]').click
хотя я бы наверное переписал что то типа
span = find(:xpath, './/span[text()="Test"]')
span.hover
span.find(:xpath, '../a[@title="Hidden Thing to click"]').click
Вы можете вызвать событие mouseenter, которое сделает его видимым, а затем получить его с помощью селектора.
Сначала вам нужен доступ к объекту драйвера селена (может быть, ваш page.driver
или же (page.driver.browser
)
<driver>.execute_script <<-JS
$("<some_selector>").trigger("mouseenter")
JS
обратите внимание, это предполагает, что JQuery работает на веб-странице. В противном случае вы можете переписать его на обычном js.