ruby – 如何基于capybara中的元素发送JavaScript

ruby – 如何基于capybara中的元素发送JavaScript,第1张

概述我希望在Capybara做这样的事情: browser.execute_script("arguments[0].setAttribute('value', 'value')", element) 上面的行是在selenium / ruby​​上运行的,但是使用带有capybara的execute_script只需要1个参数(脚本),因此我无法定义我希望执行脚本的元素……任何想法? 选项1 – 直 我希望在Capybara做这样的事情:

browser.execute_script("arguments[0].setAttribute('value','value')",element)

上面的行是在selenium / ruby​​上运行的,但是使用带有capybara的execute_script只需要1个参数(脚本),因此我无法定义我希望执行脚本的元素……任何想法?

解决方法 选项1 – 直接调用Selenium的execute_script

最快的解决方案是绕过Capybara API并直接调用Selenium-WebDriver的execute_script方法.

为此,您需要使用以下方法访问底层的Selenium :: WebDriver :: Driver:

page.driver.browser

同样,传递给Selenium的execute_script的元素需要是Selenium :: WebDriver :: Element(而不是Capybara :: Node :: Element).这是通过:

element.native

例如,假设您有一个包含文本字段的页面:

<input value="5" ID="fIEld">

然后以下将更改字段的值:

element = find('#fIEld')p element.value#=> "5"page.driver.browser.execute_script("arguments[0].setAttribute('value',element.native)p element.value#=> "value"

选项2 – 补丁Capybara允许参数

如果你需要经常这样做,你可以修补Capybara的execute_script方法来获取参数,将参数转换为Selenium对象,然后将其传递给Selenium-WebDriver的方法.补丁将是:

require 'capybara'class Capybara::Session   def execute_script(script,*args)    @touched = true    driver.execute_script(script,*args)  endendclass Capybara::Selenium::Driver   def execute_script(script,*args)    args.map! { |e| e.kind_of?(Capybara::Node::Element) ? e.native : e }    browser.execute_script(script,*args)  endend

这将允许您将Capybara元素传递给会话execute_script方法:

element = page.find('#fIEld')p element.value#=> "5"page.execute_script("arguments[0].setAttribute('value',element)p element.value#=> "value"
总结

以上是内存溢出为你收集整理的ruby – 如何基于capybara中的元素发送JavaScript全部内容,希望文章能够帮你解决ruby – 如何基于capybara中的元素发送JavaScript所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1286757.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-09
下一篇2022-06-09

发表评论

登录后才能评论

评论列表(0条)

    保存