السيلينيوم RC:تشغيل الاختبارات في عدة متصفحات تلقائيا
-
03-07-2019 - |
سؤال
لقد بدأت في إنشاء بعض روبي وحدة الاختبارات التي تستخدم السيلينيوم RC لاختبار تطبيقات الويب مباشرة في المتصفح.أنا باستخدام Selenum العميل عن روبي.لقد خلق الفئة الأساسية الأخرى السيلينيوم الاختبارات يرث.
وهذا يخلق العديد من SeleniumDriver الحالات وجميع الأساليب التي هي في عداد المفقودين يطلق على كل حالة.هذا أساسا تدير الاختبارات في نفس الوقت.
كيف يكون الناس الآخرين الآلي هذا ؟
هذا هو بلدي التنفيذ:
class SeleniumTest < Test::Unit::TestCase
def setup
@seleniums = %w(*firefox *iexplore).map do |browser|
puts 'creating browser ' + browser
Selenium::SeleniumDriver.new("localhost", 4444, browser, "http://localhost:3003", 10000)
end
start
open start_address
end
def teardown
stop
end
#sub-classes should override this if they want to change it
def start_address
"http://localhost:3003/"
end
# Overrides standard "open" method
def open(addr)
method_missing 'open', addr
end
# Overrides standard "type" method
def type(inputLocator, value)
method_missing 'type', inputLocator, value
end
# Overrides standard "select" method
def select(inputLocator, optionLocator)
method_missing 'select', inputLocator, optionLocator
end
def method_missing(method_name, *args)
@seleniums.each do |selenium_driver|
if args.empty?
selenium_driver.send method_name
else
selenium_driver.send method_name, *args
end
end
end
end
يعمل هذا, ولكن إذا كان أحد المتصفح فشل الاختبار كله فشل وليس هناك طريقة لمعرفة المتصفح الذي فشل في.
المحلول
هل حاولت السيلينيوم الشبكة?أعتقد أنه يخلق جيدة ملخص التقرير الذي يظهر التفاصيل التي تحتاج إليها.قد أكون مخطئا, كما لم تستخدم لفترة طويلة.
نصائح أخرى
انتهى بي الأمر تعديل السيلينيوم في البروتوكول.rb إلى رفع AssertionFailedError
مع كل من @browser_string
والرسالة عاد من السيلينيوم RC إذا كان الرد لم تبدأ مع "موافق".أنا أيضا تعديل http_post
طريقة للعودة كله استجابة الجسم ، method_missing
عودة مجموعة من القيم العودة لإصدار get_X الأوامر إلى السيلينيوم RC.
إضافة هذا الرمز إلى الرمز في السؤال و يجب أن تكون قادرا على رؤية أي تأكيدات تفشل على المتصفحات.
# Overrides a few Driver methods to make assertions return the
# browser string if they fail
module Selenium
module Client
class Driver
def remote_control_command(verb, args=[])
timeout(default_timeout_in_seconds) do
status, response = http_post(http_request_for(verb, args))
raise Test::Unit::AssertionFailedError.new("Browser:#{@browser_string} result:#{response}") if status != 'OK'
return response[3..-1]
end
end
def http_post(data)
http = Net::HTTP.new(@server_host, @server_port)
response = http.post('/selenium-server/driver/', data, HTTP_HEADERS)
#return the first 2 characters and the entire response body
[ response.body[0..1], response.body ]
end
end
end
end
#Modify your method_missing to use seleniums.map to return the
#results of all the function calls as an array
class SeleniumTest < Test::Unit::TestCase
def method_missing(method_name, *args)
self.class.seleniums.map do |selenium_driver|
selenium_driver.send(method_name, *args)
end
end
end
تنويه:لا السيلينيوم الخبراء.
هل تريد فقط أن تعرف المتصفح الذي فشل, أو هل تريد تشغيل اختبار في جميع المتصفحات ثم تقرير إجمالي الفشل عندما يتم ذلك ؟
الأول هو بسيط جدا إذا كنت مخزن برامج التشغيل عن طريق تجزئة في الإعداد الخاص بك.(أنا متأكد من أن هناك يتوهم السراويل طريقة للقيام بذلك مع تجزئة.حقن, ولكن أنا كسول.)
@seleniums = {}
%w(*firefox *iexplore).each do |browser|
puts 'creating browser ' + browser
@seleniums[browser] = Selenium::SeleniumDriver.new("localhost", 4444, browser, "http://localhost:3003", 10000)
end
ثم تغيير إعدادات الوظيفة الأساسية لتعديل استثناءات تتضمن اسم السائق تستخدم شيئا مثل:
@seleniums.each do |name, driver|
begin
driver.send method_name, *args
rescue Exception => ex
raise ex.exception(ex.message + " (in #{name})")
end
end
يجب أن تحصل على إغلاق.
تحتاج إلى علاج كل اختبار مستقل.حتى لو واحد فشل الاختبار سوف تحمل على اختبار اختبارات أخرى.تحقق من phpunit والسيلينيوم rc