2

我是 WATIR+Ruby 的新手。登录到这样的表格后,我正在尝试继续测试

browser.link(:name, 'login-facebook id=').click
browser.text_field(:id,'email').set(usr)
browser.text_field(:id,'pass').set(pwd)
puts 'form submit'
browser.form(:id,'login_form').submit
puts 'hello world'

最多登录工作。我看到表单提交并且表单已提交。但不能更进一步。看不到“你好世界”

4

2 回答 2

4

我认为导致问题的原因是 http 请求需要一些时间才能加载,请尝试放置类似

sleep 1 until b.a(:class, "jewelButton").exists? 

就在您的第 5 行下方。

还有为什么不:b.button(:text, "Log In").click而不是b.form(:id,'login_form').submit

在 irb 中,无论哪种方式都可以正常工作:

irb(main):001:0>require "watir-webdriver"
=> true
irb(main):002:0>b = Watir::Browser.new :chrome
Started ChromeDriver
port=55320
version=22.0.1203.0b
log=C:\Users\your_username\chromedriver.log
=> #<Watir::Browser:0x..fc4b0180c url="chrome://newtab/" title="New Tab">
irb(main):015:0> b.goto "facebook.com"
=> "http://www.facebook.com/"
irb(main):003:0>b.text_field(:id,'email').set(usr)
=> {}
irb(main):004:0>b.text_field(:id,'pass').set(pwd)
=> {}
irb(main):005:0>puts 'form submit'
form submit
=> nil
irb(main):006:0>b.button(:text,"Log In").click
=> nil
irb(main):007:0>puts "blah blah"
blah blah
=> nil
irb(main):008:0>b.a(:class, "jewelButton").click
=> []
irb(main):010:0>b.a(:class, "jewelButton").click
=> []
于 2012-09-19T10:46:54.730 回答
0

假设您对所有命令都使用新行(与您粘贴的代码块不同),我的第一个想法是控制台不会在测试结束之前显示文本输出,除非您打开了缓冲区同步。您是否可能不等待脚本完成?

将此行添加到脚本的顶部,看看是否可以解决问题。

$stdout.sync = true
browser.link(:name, 'login-facebook id=').click
browser.text_field(:id,'email').set(usr)
browser.text_field(:id,'pass').set(pwd)
puts 'form submit'
browser.form(:id,'login_form').submit
puts 'hello world'
于 2012-09-12T22:26:33.197 回答