Может ли экшен-строитель решить обнаруженные элементы?

В настоящее время, и часто у меня есть элементы на странице, которые становятся видимыми при наведении курсора.

Конструктор действий звучал многообещающе, но, похоже, требует элементов, найденных заранее, а не во время операции.

Это не сработает...

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.

Другие вопросы по тегам