【问题标题】:Capybara: is there opportunity to pass Capybara::Node::Element to jquery?Capybara:是否有机会将 Capybara::Node::Element 传递给 jquery?
【发布时间】:2015-06-11 01:57:39
【问题描述】:

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

当我需要从许多元素中选择一个特定元素时,我会在 .all 的帮助下搜索后得到一个 Capybara::Node::Element 数组,例如.有没有机会以 jQ 可以理解的格式将其中一个元素传递给 jQuery?

简单地传递它,就像传递 css 选择器一样会报错

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

我知道的替代方案是

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

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

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

附:简单地说,问题是要得到一个 Capybara 和 jQuery 都可以理解的结果。现在,当我遍历类似元素时,我有一个带有许多必要元素的全局计数器。但是我必须根据 Capybara(这里可以是 Capybara::Node::Element)或 jscripts(这里我必须在初始选择器中添加切片)使用它来提供不同的代码。

【问题讨论】:

    标签: jquery capybara


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多