Ива*_*вац 4 ruby selenium capybara
我正在使用Capybara(Selenium驱动程序)访问网站上的某些页面.我只需点击数组中的每个项目,然后单击后退按钮.它很好,但每次经过一些迭代后它就会破坏.这是代码:
all(:xpath, '//table[@class="griglia_bordata"]//tr[td]/td/a[1]').each do |a|
a_js_functions << a[:href]
end
a_js_functions.each do |js_for_model|
puts js_for_model
page.execute_script js_for_model
find(:xpath, "//a[text()='Check availability']").click
puts find(".testo_grande_blu_B").text
puts "--------------------------------------------"
find(:xpath, "//a[text()='Back']").click
end
Run Code Online (Sandbox Code Playgroud)
我有输出:
javascript:selectModel('130254')风格:RB2132 --------------------------------------- ----- javascript:selectModel('309257')风格:RB2140 ---------------------------------- ---------- javascript:selectModel('68238')风格:RB3016 ----------------------------- --------------- javascript:selectModel('68248')风格:RB3025 ------------------------ -------------------- javascript:selectModel('68293')风格:RB3026 ------------------- ------------------------- javascript:selectModel('68320')风格:RB3044 -------- ------------------------------ javascript:selectModel('68460')/usr/lib/ruby/1.9.1/net /protocol.rb:146:in
rescue in rbuf_fill': Timeout::Error (Timeout::Error) from /usr/lib/ruby/1.9.1/net/protocol.rb:140:inrbuf_fill'来自/usr/lib/ruby/1.9.1/net/protocol.rb:122:inreaduntil' from /usr/lib/ruby/1.9.1/net/protocol.rb:132:inreadline'来自/usr/lib/ruby/1.9.1/net/http.rb :2562:在read_status_line' from /usr/lib/ruby/1.9.1/net/http.rb:2551:inread_new'中来自/usr/lib/ruby/1.9.1/net/http.rb:1319:inblock in transport_request' from /usr/lib/ruby/1.9.1/net/http.rb:1316:incatch'来自/usr/lib/ruby/1.9.1/net/http.rb:1316:intransport_request' from /usr/lib/ruby/1.9.1/net/http.rb:1293:in请求来自/usr/lib/ruby/1.9.1/net/http.rb:1286:inblock in request' from /usr/lib/ruby/1.9.1/net/http.rb:745:instart'来自/usr/lib/ruby/1.9.1/net/http.rb:1284:inrequest' from /var/lib/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/default.rb:82:inresponse_for'来自/无功/ lib目录/宝石/ 1.9.1 /宝石/ seleni um-webdriver-2.25.0/lib/selenium/webdriver/remote/http/default.rb:38:inrequest' from /var/lib/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/common.rb:40:incall from from /var/lib/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib /selenium/webdriver/remote/bridge.rb:598:inraw_execute' from /var/lib/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/bridge.rb:576:in执行'from /var/lib/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/bridge.rb: 554:在find_elements_by' from /var/lib/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/common/search_context.rb:62:in/var/lib/gems/1.9.1/gems/capybara-1.1.2/lib/capybara/selenium/driver.rb:52:in的find' from /var/lib/gems/1.9.1/gems/capybara-1.1.2/lib/capybara/node/finders.rb:158:infind_elements'中,来自/var/lib/gems/1.9的 find_in_base'. 1/gems/capybara-1.1.2/lib/capybara/node/finders.rb:137:block in first' from /var/lib/gems/1.9.1/gems/capybara-1.1.2/lib/capybara/node/finders.rb:136:in来自/var/lib/gems/1.9.1/gems/capybara-1.1.2/lib/capybara/node /finders.rb:136:infirst' from /var/lib/gems/1.9.1/gems/capybara-1.1.2/lib/capybara/node/finders.rb:27:in在找到'from /var/lib/gems/1.9.1/gems/capybara-1.1.2/lib/capybara/node/base.rb:46:in find'fromwait_until' from /var/lib/gems/1.9.1/gems/capybara-1.1.2/lib/capybara/node/finders.rb:27:in(eval ):2:在/home/biske/workspace/ScrapingGlasses/lib/luxottica.rb:36:in go' 中find' from /var/lib/gems/1.9.1/gems/capybara-1.1.2/lib/capybara/dsl.rb:161:in找到'from /home/biske/workspace/ScrapingGlasses/lib/luxottica.rb:39:in ' /home/biske/workspace/ScrapingGlasses/lib/luxottica.rb:48:in`'block in scrape' from /home/biske/workspace/ScrapingGlasses/lib/luxottica.rb:36:inscrape' from /home/biske/workspace/ScrapingGlasses/lib/luxottica.rb:12:in
我之前看到过类似的痕迹和2个可能的原因:
1)像FakeWeb和WebMock这样的宝石修改了ruby的http.尝试删除那些您可能用来模拟/阻止Web请求的宝石和任何类似的宝石.
2)我在一个真正加载的系统中看到了一个案例,这个超时会在某种程度上随机发生.真的,这里的问题不是测试,而是系统及其上运行的内容.可以更改http库使用的超时并继续测试.
更新为Capybara :(来自http://selenium.googlecode.com/svn/wiki/RubyBindings.wiki)
Capybara.register_driver :selenium_extended_http_timeout do |app|
client = Selenium::WebDriver::Remote::Http::Default.new
client.timeout = 240
Capybara::Selenium::Driver.new(app,
:browser => :firefox,
:http_client => client,
:resynchronization_timeout => 60,
:resynchronize => true)
end
Capybara.javascript_driver = :selenium_extended_http_timeout
Run Code Online (Sandbox Code Playgroud)
您很可能不需要重新同步的东西.
在这两种情况下,这都与硒如何进行内部沟通有关.JsonWireProtocol.
| 归档时间: |
|
| 查看次数: |
2786 次 |
| 最近记录: |