
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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)