首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链式Watir命令

链式Watir命令
EN

Stack Overflow用户
提问于 2017-05-09 21:51:35
回答 2查看 148关注 0票数 0

例如,我希望从http://www.useragentstring.com/获得浏览器的用户代理作为输出,并将其存储在一个变量中。目前,我可以在多行中完成

代码语言:javascript
复制
require 'watir'
b = Watir::Browser.new(:chrome)
b.goto('http://www.useragentstring.com/')
agent = b.textarea.text
b.close

理想情况下,我想用一行来做。有点像

代码语言:javascript
复制
require 'watir'
agent = Watir::Browser.new(:chrome).goto('http://www.useragentstring.com/').textarea.text

但这不符合

代码语言:javascript
复制
NoMethodError: undefined method `textarea' for "http://www.useragentstring.com/":String`

因此,当goto部分工作时,其他部分就不能工作了。因为watir允许我们执行类似wait_until_present.click之类的操作,所以我希望有一些方法来链接这些方法。这有可能吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-10 12:49:34

通过使用tap方法,您可以使任何东西都是可连锁的。正如Ruby文档所描述的

向块生成self,然后返回self。该方法的主要目的是“挖掘”一个方法链,以便对链中的中间结果执行操作。

这意味着您可以使用tap调用goto,并且仍然拥有用于调用textareaWatir::Browser实例。

代码语言:javascript
复制
agent = Watir::Browser.new(:chrome).tap{ |b| b.goto('http://www.useragentstring.com/') }.textarea.text
票数 3
EN

Stack Overflow用户

发布于 2017-05-10 10:14:45

虽然goto方法不支持链接,但您可以为Watir::Browser定制如下方法

代码语言:javascript
复制
class Watir::Browser
  def chain_goto(url)
    goto(url)
    self
  end
end

然后你就可以像Watir::Browser.new(:firefox).chain_goto('http://www.useragentstring.com/').textarea.text一样使用它了。

所以完整的代码就像

代码语言:javascript
复制
require 'watir'

class Watir::Browser
  def chain_goto(url)
    goto(url)
    self
  end
end

b = Watir::Browser.new(:firefox).chain_goto('http://www.useragentstring.com/'.textarea.text
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43880460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档