私は Ubuntu Linux/Firefox 13 と WATIR を使用しています。(watir-webdriver-0.6.1) 約 16 個の iframe へのリンクを含む Web ページがあります。すべてこのようにリンクされています。「11」をクリックすると、名前と ID の両方が「page_11」に等しい iframe が表示されます。 "
<a href="javascript:nextPage(8);">9</a>
<a href="javascript:nextPage(9);">10</a>
<a href="javascript:nextPage(10);">11</a>
<a href="javascript:nextPage(11);">12</a>
番号をクリックすると iframe がページに配置され、ページにはコメント用の別のボックス (メイン ページ) が表示されます。
スクリプトで確認したので、私が知っていることは次のとおりです。ページが表示され、16 個のリンクがすべて表示されます。11 番目のリンクをクリックするための WATIR スクリプトがあります。それを行い、テキスト ボックスに入力し、次に browser.frame(:index,0).locate メソッドを使用してメイン ページに戻り、iframe がある場所の下にあるコメント ボックスに入力します。記入。
これは問題ではありません。
問題は、スクリプトを取得して「12」というラベルの付いたリンクをクリックしようとすることです。(これらの iframe を順番に通過する必要があります)
メインページのリンク (またはボタン) が再び見つかりません。私はで終わる....
[remote server] file:///tmp/webdriver-profile20120730-32067-1haylz3/extensions/fxdriver@googlecode.com/components/command_processor.js:5780:in `unknown': Element is not currently visible and so may not be interacted with (Selenium::WebDriver::Error::ElementNotVisibleError)
私のスクリプト(関連部分)は以下のとおりです....
#!/usr/local/bin/ruby
require 'rubygems'
require 'watir-webdriver'
require "webdriver-user-agent"
require 'headless'
require 'thread'
#Firefox 13 path below. Doesn't work with 14
Selenium::WebDriver::Firefox.path = '/home/janie/Downloads/firefox/firefox'
profile = Selenium::WebDriver::Firefox::Profile.new
profile.native_events = false;
browser=Watir::Browser.new :firefox, :profile => profile
browser.goto("http://myurl/test")
browser.link(:text,"11").click
browser.frame(:name,"page_11").locate
puts "Text fields "
puts browser.frame(:name,"page_11").text_fields.length
$counter=0
#This if loop works like a champ
if browser.frame(:id,"page_11").text_fields.length > 0
puts "Found and iterating through Text Boxes"
while $counter < browser.frame(:id, "page_11").text_fields.length do
browser.frame(:id, "page_11").text_field(:index, $counter).set("Robot_Test")
end
end
#Now go back to the main page
browser.frame(:index,0).locate
#The below works too so I know I am back on the top level/parent
if browser.text.include? "This is the main page"
puts "--> Test Passed. Found the test string"
else
puts "--> Test Failed! Could not find:"
end
#Now we are back in the main page again
browser.text_field(:name,"COMMENTS").set("ROBOT_TEST")
#The above works great
#And now the problem.....
browser.link(:text,"12").click
カブーム!上記の要素が見つからないというエラーが表示されます。
何らかの理由で、メイン ページまたはボタンのリンクが表示されなくなりました。何がこれを引き起こしているのでしょうか?私はこれを一日中探していましたが、このスクリプトを実行する前に残っているのはこれだけで、他のすべてはうまく機能します。
Watirでこの動作を回避する方法を知っている人はいますか? どうもありがとう!ジャニー
PS - Chrome でテストしてみたところ、..
/usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.21.2/lib/selenium/webdriver/remote/response.rb:52:in `assert_ok': Element must be displayed to click (Selenium::WebDriver::Error::ElementNotVisibleError)
追加しようと思っただけです。
HTML はかなり大規模なので、できるだけ簡潔にしようとしています。
注、その他のトラブルシューティング: ..... どうやら問題は、スクリプトが親フレーム index:0 に正常に戻らないことのようです。
スクリプトの修正...
puts "Javascript links in page"
puts browser.links(:text, /^\d+$/).length
15ページの Javascript リンク
(正しい)
puts "Link attribute of index:3"
puts browser.link(:index,3).text
インデックスのリンク属性:3
2
(正解)
browser.link(:text,"2").click
(はい、問題なく動作します)
#Refocus just to be safe
browser.frame(:index,0).locate
(上記の行は無意味です。焦点を合わせて、frame:index:0 に再度焦点を合わせても違いはありません)
#We're supposed to be back in parent. Let's check the no. of links again
puts "Javascript links in page - after"
puts browser.links(:text, /^\d+$/).length
ページ内の Javascript リンク -
15以降
(すべて問題ないと思います)
puts "Link attribute of index:3"
puts browser.link(:index,3).text
上記のように「2」を返す必要がありますが、値がなく、以下のエラーメッセージが表示されます.....
/usr/local/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.5.8/lib/watir-webdriver/elements/element.rb:365:in `assert_exists': unable to locate element, using {:text=>"3", :tag_name=>"a"} (Watir::Exception::UnknownObjectException)
from /usr/local/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.5.8/lib/watir-webdriver/elements/element.rb:95:in `click'
注 2: さらに基本的なこと:
puts "Clicking link 2"
browser.link(:text,"2").click
問題ない
puts "Clicking link 3"
browser.link(:text,"3").click
エラー
/usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.21.2/lib/selenium/webdriver/remote/response.rb:52:in `assert_ok': Element must be displayed to click (Selenium::WebDriver::Error::ElementNotVisibleError)