2011-01-27 17 views
14

Varsayılan olarak Selenium, Salatalık kullanarak tanımladığım senaryolarda olabildiğince hızlı çalışır. Daha düşük bir hızda çalışacak şekilde ayarlamak istiyorum, bu yüzden sürecin bir videosunu yakalayabiliyorum.Selenium'u (Capybara'dan geçerek) daha düşük hızda nasıl çalıştırabilirim?

Selenium::Client::Driver örneğinin bir set_speed yöntemine sahip olduğunu anladım. Hangi Java API ile karşılık gelir.

Selenium::Client::Driver sınıfının bir örneğini nasıl edinebilirim? page.driver kadar alabilirim, ancak bu Capybara::Driver::Selenium örneğini döndürür.

cevap

21

Bir ipucu için http://groups.google.com/group/ruby-capybara/msg/6079b122979ffad2'a teşekkürler.

Bunun sadece Ruby'nin uykusunu kullandığı bir not, bu yüzden biraz belirsiz - ama sizin için işi yapmalı. Ayrıca, her şey için yürütme denir, bu yüzden bu yüzden ikinci saniye bekler. Ara adımlar - hazır olana kadar bekleyin, alanı kontrol edin, netleyin, metin girin - her duraklama.

require 'selenium-webdriver' 
module ::Selenium::WebDriver::Firefox 
    class Bridge 
    attr_accessor :speed 

    def execute(*args) 
     result = raw_execute(*args)['value'] 
     case speed 
     when :slow 
      sleep 0.3 
     when :medium 
      sleep 0.1 
     end 
     result 
    end 
    end 
end 

def set_speed(speed) 
    begin 
    page.driver.browser.send(:bridge).speed=speed 
    rescue 
    end 
end 

Sonra bir adım tanımında, çağrı:

sizin özellikleri/destek dizininde "throttle.rb" oluşturun (Salatalık kullanılıyorsa) ve doldurun

set_speed(:slow) 

ya: sıfırlamak için

set_speed(:medium) 

, çağrı:

set_speed(:fast) 
+0

thx ("az" bazı küçük değer için) daha az kırılgandır olacak! sadece 'sayfa' durumunda mevcut değil, ya Capybara :: DSL 'dahil veya Capybara.current_session' ile değiştirin – RngTng

2

Bir güncelleştirme olarak, bu sınıftaki yürütme yöntemi artık kullanılamaz. Şimdi burada sadece:

module ::Selenium::WebDriver::Remote

Ben IE bazı testler azaltmasını gerekli ve bu çalıştı.

+0

tam bir kod örneği verebilir misiniz lütfen :) tanx. –

+1

@MischaMolhoek Yukarıdaki kodu kullanın ve '' modül :: Selenium :: WebDriver :: Firefox '' modülünü :: Değiştirin :: WebDriver :: Remote 'ile değiştirin! : D Şu anda bu w/rspec özelliklerini kullanıyorum ve özellik özelliklerinden önceki blokumda 'spec/support/throttle.rb'' set_speed: medium' komutunu kullanıyorum. Çok fazla css ve selenyum çok hızlı olduğunda bunun için harika çalışıyor. Güncelleme için teşekkürler @phil! –

+0

@rbatta, tanx :) –

0

Bu iş parçacığında belirtilen yöntemler artık Selenium Webdriver v3 ile çalışmaz.

Bunun yerine yürütme komutuna bir uyku eklemeniz gerekecek.

module Selenium::WebDriver::Remote 
    class Bridge 
    def execute(command, opts = {}, command_hash = nil) 
     verb, path = commands(command) || raise(ArgumentError, "unknown command: #{command.inspect}") 
     path = path.dup 

     path[':session_id'] = session_id if path.include?(':session_id') 

     begin 
     opts.each { |key, value| path[key.inspect] = escaper.escape(value.to_s) } 
     rescue IndexError 
     raise ArgumentError, "#{opts.inspect} invalid for #{command.inspect}" 
     end 

     Selenium::WebDriver.logger.info("-> #{verb.to_s.upcase} #{path}") 
     res = http.call(verb, path, command_hash) 
     sleep(0.1) # <--- Add your sleep here. 
     res 
    end 
    end 
end 

Bu, özel bir API'ye yama eklediğinizden, testleri yavaşlatmanın çok gçlü bir yolu olduğunu unutmayın.

1

Bu işe ve ipucu için

require 'selenium-webdriver' 
module ::Selenium::WebDriver::Remote 
    class Bridge 
    alias_method :old_execute, :execute 
    def execute(*args) 
     sleep(0.1) 
     old_execute(*args) 
    end 
    end 
end 
İlgili konular