如何在我正在使用watir-webdriver的页面上自动化Google链接?

时间:2011-12-08 16:36:35

标签: ruby watir watir-webdriver

我正在处理的网页链接是http://www.whatcar.com/car-news/subaru-xv-review/260397

我正在尝试自动“点击谷歌链接”,但我没有运气并继续收到错误。

链接HTML:

<a tabindex="0" role="button" title="" class="s5 JF Uu" id="button" href="javascript:void(0);" aria-pressed="false" aria-label="Click here to publicly +1 this."></a>

我的代码:

@browser.link(:class, "s5 JF Uu").click

错误讯息:

unable to locate element, using {:class=>"s5 JF Uu", :tag_name=>"a"} (Watir::Exception::UnknownObjectException)
./step_definitions/11.rb:12:in `/^On the page I click 'Twitter' , Facebook and Google button$/'
11.feature:8:in `When On the page I click 'Twitter' , Facebook and Google+ button'

3 个答案:

答案 0 :(得分:2)

链接位于框架内。为了使其更有趣,每次刷新页面时框架id都不同。

browser.frames.collect {|frame| frame.id}
=> ["I1_1323429988509", "f3593c4f374d896", "f4a5e09c20624c", "stSegmentFrame", "stLframe"] 

browser.refresh
=> [] 

browser.frames.collect {|frame| frame.id}
=> ["I1_1323430025052", "fccfdf9410ef34", "f11036dad706668", "stSegmentFrame", "stLframe"] 

I1_1323429988509I1_1323430025052是框架。由于I1_部分始终相同,而其他任何框架都没有,您可以像这样访问框架:

browser.frame(:id => /I1_/)

由于框架内只有一个链接:

browser.frame(:id => /I1_/).as.size
=> 1 

您可以点击以下链接:

browser.frame(:id => /I1_/).a.click

或者如果您希望更明确

browser.frame(:id => /I1_/).a(:id => "button").click

这将打开一个新的浏览器窗口,这里面临一个新的挑战! :)

答案 1 :(得分:1)

技术答案: 您链接的页面上的按钮类与我列出的类不同。看起来它基于本地计算机上的cookie(在Watir驱动的Firefox或IE会话期间不存在)会有不同的行为。

你需要找到一个不动态的不同元素来挂钩。

道德答案: 您试图通过社交媒体自动推广在线文章是值得怀疑的。 Watir / Watir-Webdriver不是垃圾邮件机器人,您使用的服务明确禁止使用自动化/机器人。

答案 2 :(得分:1)

“按钮”链接位于iframe内。阅读watir Wiki how to deal with stuff in frames。如果这还不足以使其运行,请使用修改后的代码和错误等编辑答案,我们可以从那时开始工作。