2012-09-12 52 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 
=> []