2012-09-12 50 views
0

我是WATIR + Ruby的新手。 我想继续登录到一个表单如watir在表格提交后

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' 

高达登录后的作品进行测试。我看到表单提交和表单被提交。但不能走得更远。看不到'hello world'

+1

无论哪个领域,你可以查看robots.txt文件,看看他们的自动化策略。 https://www.facebook.com/robots.txt –

+0

是否有用户可用的控件来提交表单?也许提交按钮不仅仅是提交表单(即首先调用一些其他函数)? –

回答

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' 
+1

如果您接受它,您只受ToS约束。自动化facebook登录imho是完全合理的。 – pguardiario

+0

这只是为了测试我的多重身份验证,并返回到页面并测试更多。 $ stdout.sync = true没有任何魔法。 THANKs – tv4free

+0

如果“表单提交”显示正确,这个代码没有任何理由,“hello world”不会显示,除非脚本在提交操作期间中断并且不会继续... –

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 
=> []