如何找到与Selenium :: WebDriver :: Element对应的Capybara :: Node :: Element

时间:2015-10-01 09:02:16

标签: ruby selenium-webdriver mapping capybara

有一个节点,我通过坐标找到并希望对它执行相对的xpath查询,所以我可能需要一个Capybara对象(Capybara::Node::Element)用于.find(:xpath,但是我得到的对象来自evaluate_script("document.elementFromPoint的是Selenium对象(Selenium::WebDriver::Element)。

2 个答案:

答案 0 :(得分:1)

Capybara :: Node :: Element只是本机节点的包装器(它还存储了它的发现方式,因此可以自动重新加载)。你有可能只是使用自动重新加载行为

Capybara::Node::Element.new(current_session, element_from_evaluate, nil, nil)

答案 1 :(得分:0)

您可以使用.attribute("class")获取元素类,然后生成css_selector,最后find(:css, css_selector)返回Capybara::Node::Element

irb#1(main):139:0* p = evaluate_script("document.elementFromPoint(1000, 240)")
=> #<Selenium::WebDriver::Element:0x5cc6ed77c104c804 id="{0b83a9a2-ff2c-fe43-8518-38b7522c47a9}">
irb#1(main):140:0> c = p.attribute("class")
=> "col-xs-12 col-sm-4"
irb#1(main):141:0> cc = c.split(" ")
=> ["col-xs-12", "col-sm-4"]
irb#1(main):142:0> css = ""
=> ""
irb#1(main):143:0> cc.each { |cs| css << (".#{cs}")}
=> ["col-xs-12", "col-sm-4"]
irb#1(main):144:0> css
=> ".col-xs-12.col-sm-4"
irb#1(main):145:0> find(:css, css, :match => :first)
=> #<Capybara::Node::Element tag="div" path="/html/body/div[4]/div[1]/div[2]">

我认为您也可以使用:css代替:xpath