2012-04-26 13 views
1

driver.get "http://www.example.com"を使用してロードしたページから新しいブラウザタブですべてのリンクを開きたいとします。私は前に尋ねた他の質問に答えがありますが、私が期待したように動いていません。 コードは以下の通りです:すべてのリンクをクリックして、新しいタブでSelenium Rubyを使用してすべてのリンクを開きます

require 'rubygems' 
require 'selenium-webdriver' 

driver = Selenium::WebDriver.for :firefox 
driver.get " http://www.testfire.net " 

driver.find_elements(:tag_name, "a").each {|link| link.click } 

このコードセレンのWebドライバを実行した後のFirefox、それは創設最初のアンカータグの負荷要求されたページやクリックを開き、その後、それはエラーでクラッシュします。

私もこの1つを試しましたdriver.find_element(:tag_name, "a").send_keys [:control,'t']これは新しいタブを開きますが、ページを読み込まずに空のタブを開きます。

これをループで整理すると、エラーが表示されず、最初に読み込まれたページのすべてのリンクが別のブラウザタブで開きます。

これを機能させるには、waitを使用する必要がありますか?

[remote server] resource://fxdriver/modules/web_element_cache.js:9500:in `unknown': Element not found in the cache - perhaps the page has changed since it was looked up (Selenium::WebDriver::Error::StaleElementReferenceError) 
     from [remote server] file:///C:/Users/AKASH/AppData/Local/Temp/webdriver-profile20120427-1496-sev0j4/extensions/[email protected]/components/command_processor.js:9069:in `unknown' 
     from [remote server] file:///C:/Users/AKASH/AppData/Local/Temp/webdriver-profile20120427-1496-sev0j4/extensions/[email protected]/components/command_processor.js:9504:in `unknown' 
     from [remote server] file:///C:/Users/AKASH/AppData/Local/Temp/webdriver-profile20120427-1496-sev0j4/extensions/[email protected]/components/command_processor.js:10510:in `unknown' 
     from [remote server] file:///C:/Users/AKASH/AppData/Local/Temp/webdriver-profile20120427-1496-sev0j4/extensions/[email protected]/components/command_processor.js:10529:in `unknown' 
     from [remote server] file:///C:/Users/AKASH/AppData/Local/Temp/webdriver-profile20120427-1496-sev0j4/extensions/[email protected]/components/command_processor.js:10534:in `unknown' 
     from [remote server] file:///C:/Users/AKASH/AppData/Local/Temp/webdriver-profile20120427-1496-sev0j4/extensions/[email protected]/components/command_processor.js:10482:in `unknown' 
     from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/remote/response.rb:52:in `assert_ok' 
     from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/remote/response.rb:15:in `initialize' 
     from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/remote/http/common.rb:59:in `new' 
     from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/remote/http/common.rb:59:in `create_response' 
     from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/remote/http/default.rb:64:in `request' 
     from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/remote/http/common.rb:40:in `call' 
     from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/remote/bridge.rb:594:in `raw_execute' 
     from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/remote/bridge.rb:572:in `execute' 
     from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/remote/bridge.rb:354:in `clickElement' 
     from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/common/element.rb:34:in `click' 
     from selclick.rb:6:in `block in <main>' 
     from selclick.rb:5:in `each' 
     from selclick.rb:5:in `<main>' 
+0

「ロード要求されたページと、最初のアンカータグのクリックは、それが設立し、その後、それはエラーでクラッシュします。」あなたは何を得ているのですか? – sunnyrjuneja

+0

エラーコード –

答えて

1

これは「意図したとおりに動作する」と思います。

ループの最初の反復が正しく機能していて、その後のそれぞれが失敗しています。理由は正確にエラーによって与えられます。ページがリロードされたため、オブジェクト参照はもはや正しいリンクを指していません。

これが明確であるかどうかわからないので、正確に起こっていることに従ってください。

あなたのページにアクセスしてください。すべてのリンクは配列で収集されます。ループの最初の繰り返しで、最初のリンクをクリックします。あなたはちょうど同じページであるそのリンクを訪問します。あなたはもはや以前のページにはいません。ループの2回目の反復で、前のページのリンクが検索されます。あなたが次のページにいるので、もうそこにはありません。したがって、エラー。

これは正確に何を達成しようとしていますか?あなたはサイトのすべてのページにアクセスしようとしていますか?

サイトをクロールしようとしている場合は、代わりに機械化またはアネモネをお勧めしますか?

+0

で更新された質問いいえ最初のページのすべてのリンクをクリックしたいこの読み込まれたページから新しいブラウザのタブですべてのリンクを開くことを読み込んで考えています。私は 'send_keys'を試してみました。最初にループの中でタブキーを押してリンクを回し、Ctrl + Enterを組み合わせて新しいタブでこのリンクを開きます。私はこれが、このSelenium Rubyを使ってロードされたページからすべてのリンクを開く方法だと思います。 –

+0

Seleniumを使用することはできません。参照してください:http://stackoverflow.com/questions/6032230/selenium-2-open-link-in-new-tab-and-close-tabsここで説明されているjavascriptを使用して回避策があるかもしれません:http:// stackoverflow。 com/questions/731817/how-to-i-change-focus-to-a-new-pop-tab-in-selenium – sunnyrjuneja

1

のJava

List<WebElement> elements = driver.find_elements(_locator_); 
for (i=0; i<elements.size(); i++) { 
    List<WebElement> elements2 =driver.find_elements(_locator_) 

    WebElement ele = elements2.get(i); 

    ele.click(); 
} 
関連する問題