为什么send_keys在右键单击chrome之后无法工作,即,但firefox很好?

时间:2012-04-13 07:50:36

标签: windows webdriver watir watir-webdriver

我想通过右键单击和alt + y复制页面中的图像,并且遵循代码在firefox中运行良好,但是chrome和ie。所以我无法从剪贴板中获取图像。

require 'watir-webdriver'
b = Watir::Browser.new :chrome
b.goto('www.baidu.com')
b.img(:src=>"http://www.baidu.com/img/baidu_sylogo1.gif").right_click
b.send_keys ("{alt}y")

并遵循代码可以很好地运作

require 'watir-webdriver'
b = Watir::Browser.new :chrome
b.goto('www.baidu.com')
b.send_keys :tab

这可以很好地运作

4 个答案:

答案 0 :(得分:2)

执行b.send_keys ("{alt}y")时,您只需输入字母{,a,l等

请改为尝试:

b.send_keys([:alt, 'y'])

Watir和Watir-Webdriver为send_keys使用不同的输入 - 请参阅here

注意:我没有用这个来测试你的完整脚本。说实话,我无法弄清楚如何使用alt + y手动将图像复制到剪贴板。

答案 1 :(得分:1)

有助于了解您要保存图像的原因。屏幕截图会起作用吗?如果愿意,试试这个:

b.driver.save_screenshot "#{Time.now.to_i}.png"

答案 2 :(得分:1)

不要浪费任何时间尝试自动验证,例如Captcha (完全自动化的公共图灵测试,以告诉计算机和人类)或旨在阻碍自动化的其他认证系统。是的,它可以完成,但它有效地参与军备竞赛或在风车上倾斜。更重要的是,它对您的雇主没有任何价值。

围绕验证码或验证码自动化的正确方法是配置测试环境,使代码可预测。许多验证码工具或验证工具都能够在“测试”模式下运行,并具有设置的响应。您永远不会以这种方式配置生产环境,但您可以轻松(并且应该)以这种方式配置测试环境。

与设置和控制测试环境的人交谈。他们只需要一些知道它是测试环境的逻辑,然后使用适当的api调用验证码或授权工具(如google authorizer,或者每隔5分钟吐出数字的小部件)将其置于测试模式,以便它使用可预测的验证响应。

以下是我所谈论的一个例子:http://captcha.biz/doc/aspnet/api/captcha-configuration-reference.html#BotDetect.Configuration.ITestModeConfiguration

如果您使用的东西不支持此功能,那么您可以将系统配置为完全跳过验证码,也可以将其配置为指向您创建的某个测试存根(而不是真正的验证码系统)。这将是您或您的开发人员创建的一小段代码,它使用与真实验证码相同的api,但始终需要相同的答案。在这种情况下,一切行为都与它与真实验证码服务的谈话完全一样,但它正在谈话的小短截码始终发送具有相同“答案”的相同图像,例如'测试'

这种情况对于测试环境来说是正常的,其中各种第三方内容被禁用,或者进入测试模式,或者连接到测试沙箱(例如验证码,广告,网站分析,跟踪像素,信用卡)卡授权服务等)

答案 3 :(得分:1)

基于之前的评论之一,它听起来像你最终只需要一种方法来保存图像。我假设将它复制到剪贴板并不重要。

所以你在Watir-Webdriver中进行所有导航,然后切换到其他一个Ruby宝石(ex-Open-URI或Net-Http)来下载图像。

以下是使用Open-URI的示例:

require 'watir-webdriver'
require "open-uri"

save_file = 'C:\Documents and Settings\Setup\Desktop\image.png'

b = Watir::Browser.new :chrome
b.goto('www.baidu.com')
image_location = b.img.src

File.open(save_file, 'wb') do |fo|
  fo.write open(image_location).read
end