سؤال

لقد بدأت في إنشاء بعض روبي وحدة الاختبارات التي تستخدم السيلينيوم 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top