Ruby action builder能否解决悬停元素?

Ruby action builder能否解决悬停元素?,ruby,selenium,capybara,Ruby,Selenium,Capybara,目前,我经常在页面上看到悬停时可见的元素 ActionBuilder听起来很有希望,但似乎需要事先找到的元素,而不是在操作过程中 这行不通 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

目前,我经常在页面上看到悬停时可见的元素

ActionBuilder听起来很有希望,但似乎需要事先找到的元素,而不是在操作过程中

这行不通

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的可靠方法,它似乎隐藏在某些页面上


想法?

您可以触发鼠标输入事件,使其可见,然后使用选择器获取

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

注意,这假设jquery正在网页上运行。否则,您可以用纯js重写它

水豚悬停法不适合你吗

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

这引发了一个未知错误,即我的语法错误we=find:xpath,'//blah and execute_script${we}.trigger\mouseenter\n您尚未将we变量定义为可以传递给javascript的内容。jquery选择器的参数是一个字符串,因此您可以像$'{css_selector}一样插入它。请看我可以改为使用xpath选择器吗?请看常识解决方案通常如何暗示我们。-乔治·卡林托马斯你太棒了!Thanks@TangibleDream不客气,如果您使用的是最新的水豚悬停,则会返回调用它的对象,以便您可以在需要时将其全部链接起来
span = find(:xpath, './/span[text()="Test"]')
span.hover
span.find(:xpath, '../a[@title="Hidden Thing to click"]').click