Capybara:有机会将Capybara :: Node :: Element传递给jquery吗?

时间:2015-06-10 13:47:38

标签: jquery capybara

我尝试编写一般可以使用的代码,而页面有很多具有相同选择器和值的元素。有时我需要用Capybara不知道的特定元素做事 - 添加或删除类,改变背景颜色。

当我需要从许多人中选择一个特定元素时,我在 .all 的帮助下搜索了一个Capybara :: Node :: Element数组,例如。是否有机会将这些元素中的一个传递给jQuery,以jQ理解格式?

以与传递css选择器相同的方式简单传递它会产生错误

unknown error: Syntax error, unrecognized expression: #<Capybara::Node::Element:0x00000003e60d90>

我知道的替代品是

  • :nth-​​of-type() /我尝试了,它对我来说不起作用,仍然不能完全理解为什么它只能工作在大多数情况下/

  • 直接在jQuery中:将所有类似的选择器收集到一个数组中,切换它并制作我需要的所有东西。可接受,但有一个缺点:在Capybara提供更多脚本。

是否有机会在 .all 的帮助下直接将搜索结果传递给jQuery或其他任何替代方案?

P.S。简单地说,问题是获得一个Capybara和jQuery都可以理解的结果。现在,当我循环遍历类似的元素时,我有一个全局计数器,其中包含许多必要的计数器。但是我必须根据它是否会被Capybara(这里可以是Capybara :: Node :: Element)或者jscripts(这里我必须为初始选择器添加切片)提供不同的代码。

1 个答案:

答案 0 :(得分:0)

Capybara本身无法将元素传递回浏览器以执行脚本(由于驱动程序之间的兼容性),但是有些驱动程序确实支持它。如果在capybara中使用selenium驱动程序,可以在参数&#39; array&#39;中使用传递的元素,你可以这样做

el = page.find(:css,&#39;#my_id&#39;) page.driver.browser.execute_script(&#34; $(arguments [0])。addClass(&#39; something&#39;);&#34;,el.native)