行动建设者能解决悬停元素吗?

时间:2017-01-21 22:45:10

标签: ruby selenium capybara

目前,我经常会在页面上显示悬停时可见的元素。

动作建设者听起来很有希望,但似乎需要预先找到的元素,而不是在操作期间。

这不会起作用......

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

也许真正的问题是找到onhover javascript的确定方法,它似乎隐藏在某些页面上。

思想?

2 个答案:

答案 0 :(得分:1)

Capybara 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

答案 1 :(得分:0)

您可以触发一个使其可见的mouseenter事件,然后使用选择器获取它。

首先,您需要访问selenium驱动程序对象(可能是您的page.driver或(page.driver.browser

<driver>.execute_script <<-JS
  $("<some_selector>").trigger("mouseenter")
JS

请注意,这假设jquery正在网页上运行。你可以用普通的js重写它。