目前,我经常会在页面上显示悬停时可见的元素。
动作建设者听起来很有希望,但似乎需要预先找到的元素,而不是在操作期间。
这不会起作用......
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的确定方法,它似乎隐藏在某些页面上。
思想?
答案 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重写它。