1

以下のRubyで簡単なWebdriverテストがあります:

require 'rubygems'
require 'selenium-webdriver'

driver = Selenium::WebDriver.for :firefox
# example application under test
driver.get "https://dev08-olb.nz.thenational.com/ib4b/app/login"

element = driver.find_element :id => "accessId"
element.send_keys "123456"

element = driver.find_element :id => "userId"
element.send_keys "user1"

element = driver.find_element :id => "password"
element.send_keys "password1"
element.submit

if 
 "Hello".eql? driver.title
  puts "Page title is #{driver.title}"
else 
 puts "damn it, it must be Monday"
end

driver.quit

今後はログインが必要なケースが多くなるので、できるだけ繰り返しを少なくしたいので、以下の2つのRubyスクリプトを作成します。

ログイン.rb

require 'rubygems'
require 'selenium-webdriver'

class LogIn
    def initialize(accessID, user, pass)
    @accessID    = accessID
    @user   = user
    @pass = pass

    driver = Selenium::WebDriver.for :firefox
    driver.get "https://dev08-olb.nz.thenational.com/ib4b/app/login"

    element = driver.find_element :id => "accessId"
    element.send_keys @accessID

    element = driver.find_element :id => "userId"
    element.send_keys @user

    element = driver.find_element :id => "password"
    element.send_keys @pass
    element.submit
  end
end

HelloWorld.rb

require 'rubygems'
require 'selenium-webdriver'
require './LogIn'

LogIn.new("123456","user1","password1")

driver = Selenium::WebDriver.for :firefox
 if 
 "Hello".eql? driver.title
  puts "Page title is #{driver.title}"
else 
 puts "damn it, it must be Monday"
end

driver.quit

ただし、HelloWorld.rb ではドライバーが 2 回インスタンス化されるため、テストの実行時にブラウザーの 2 つのインスタンスが開かれますが、これは望ましくありません。しかし、HelloWorld.rb でドライバーをインスタンス化しないと、後でそのプロパティにアクセスできません。

この種の状況を管理する方法は何ですか?

あなたの助けに感謝します。

前もって感謝します。

4

1 に答える 1

1

これは、Selenium 固有ではなく、Ruby でテストをプログラムする方法に関するものです。それを行うには多くの方法があります。

これが1つです。 initialize を試しdriver HelloWorld.rbてから、に渡しますLogin.rb

HelloWorld.rb

require 'rubygems'
require 'selenium-webdriver'
require './LogIn'

driver = Selenium::WebDriver.for :firefox

LogIn.new(driver, "123456","user1","password1")

 if 
 "Hello".eql? driver.title
  puts "Page title is #{driver.title}"
else 
 puts "damn it, it must be Monday"
end

driver.quit

ログイン.rb

require 'rubygems'
require 'selenium-webdriver'

class LogIn
    def initialize(driver, accessID, user, pass)
    @driver = driver
    @accessID    = accessID
    @user   = user
    @pass = pass

    driver.get "https://dev08-olb.nz.thenational.com/ib4b/app/login"

    element = driver.find_element :id => "accessId"
    element.send_keys @accessID

    element = driver.find_element :id => "userId"
    element.send_keys @user

    element = driver.find_element :id => "password"
    element.send_keys @pass
    element.submit
  end
end
于 2013-10-07T20:55:54.780 に答える