0

私は 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)
4

1 に答える 1

0

Watir-Webdriver 内のバグである可能性があり、html を使用しないと完全には再現できませんが、次のことを試すことができます (12 リンクをクリックする直前に):

browser.window(:url => the_url_of_your_page).use

Watir-Webdriver の内部で何か問題が発生した場合、ページの HTML を「更新」することがあります。あなたは、決して知らない!

それ以外は、最初の iFrame を表示するリンクをクリックした後、Firebug のようなものを見て、ページに何か違いがあるかどうかを確認します。

何も変わっていない場合は、他の操作を行う前に最初に 12 ページをクリックできることを確認してください。表示されたエラーが正しい場合、選択しようとしているリンクと同じテキスト (この場合は 12) を含む非表示の要素がページに存在する可能性があります p links(:text => "12").count。ページ上のそのテキストを含むリンクの数を返します。

それ以外は本当にわかりません。

于 2012-07-31T13:50:23.403 に答える