2012-04-26 3 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 } 

이 코드 셀레늄 웹 드라이버를 실행 한 후 파이어 폭스,이 세운 최초의 앵커 태그에 부하 요청 된 페이지 수와 클릭 수를 열고 그 후이 오류로 충돌합니다.

나는 또한 이것을 시도했다. 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

나는 이것이 의도 한대로 작동한다고 생각합니다.

루프의 첫 번째 반복이 올바르게 작동하고 이후에 각각의 루프가 실패합니다. 이유는 정확하게 오류에 의해 주어진다. 페이지가 다시로드 되었기 때문에 객체 참조가 더 이상 올바른 링크를 가리 키지 않습니다.

확실한 지 잘 모르겠습니다. 정확히 무슨 일이 일어나는지 잘 모릅니다.

귀하의 페이지를 방문하십시오. 모든 링크가 배열로 수집됩니다. 루프의 첫 번째 반복에서 첫 번째 링크를 클릭합니다. 당신은 단지 같은 페이지 인 그 링크를 방문합니다. 당신은 이전의 페이지에 더 이상 있지 않습니다. 루프의 두 번째 반복은 이전 페이지의 링크를 찾습니다. 당신이 다음 페이지에 있기 때문에 더 이상 존재하지 않습니다. 따라서 오류.

정확하게 달성하려는 것은 무엇입니까? 사이트의 모든 페이지를 방문하려고합니까?

사이트를 크롤링하려는 경우 대신 기계화 또는 말미잘을 권장 할 수 있습니까?

+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. co.kr/questions/731817/how-to-i-change-focus-to-a-new-pop-tab-in-selenium – sunnyrjuneja

1

자바

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(); 
} 
관련 문제