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'

ログインまで動作します。フォームの送信が表示され、フォームが送信されます。しかし、それ以上進むことはできません。「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 に答える