1

Ruby で Selenium WebDriver を使用して自動テストを作成しています。そこで、要素を別のファイルに、実際のコードを別のファイルに保持しようと考えています。そしてRubyの場合、yamlデータを保存してアクセスできるgemを見つけました。したがって、次のように要素を格納しlib.yml、コードをテストtest.rbします。

lib/lib.yml

homepage:
  frame: 'mainPage'
  email: 'loginPage-email'
  password: 'loginPage-password'
  login_button: 'btnLogin'

テスト/test.rb

require 'selenium-webdriver'
require 'yaml'

driver = Selenium::WebDriver.for :firefox

driver.get 'http://www.abc.com'

config = YAML.load_file('./lib/lib.yml')

driver.switch_to.frame(config['homepage']['frame'])

email = driver.find_element(:id, config['homepage']['email'])
password = driver.find_element(:id, config['homepage']['password'])

email.clear
email.send_keys 'abc@gmail.com'

password.clear
password.send_keys 'password'

driver.find_element(:id, config['homepage']['login_button']).click

driver.quit

これにより、メンテナンスが容易になります。そうすることが良い方法かどうかを確認したいだけです。初めての試みであり、より大きなプロジェクトにこれを選択した場合にどのような問題が発生するかわからないため、質問しています。

Page オブジェクト モデルを使用して、同じことを達成できることはわかっています。しかし、私は Page オブジェクトについて知りません。では、gem の使用を避けてyml直接 gem を使用する必要がありpage objectますか?

また、誰かがどのように使用ymlするのが良い考えではないかを説明できますか (そうでない場合)?

ノート:

  1. 上記のコードでconfig['homepage']['something']は、繰り返しコードです。そのための繰り返しを避ける方法を書きます。
4

3 に答える 3

3

ええ、これは間違いなく便利です...将来UIが変更された場合でも、変更を最小限に抑えます..編集する場所は常に1つだけです...コードに渡す必要のあるデータはありますか? テストに渡された自動化データをどのように保存していますか.唯一の懸念は、追跡が困難なyamlファイルが多すぎることかもしれません.

于 2013-09-29T06:40:59.397 に答える
0

もう 1 つのステップを追加しました。yaml 自体で宣言されたロケーター (ID、名前など)。

Ex:(yaml) 
Declared env.rb which load the environment from yaml files
env.yml:
    LOGIN:
       UserName:  {id:  UserName}
       Password: {id: Password}
       RememberME: {id: RememberMe}
      Submit: {xpath: "//input[@value='Log On']"}

Then added "pages\Login.rb"

#Loads all objects from yaml 
    def get_objects 
     username=@browser.find_element( $object_array['LOGIN']['UserName'])
     password=@browser.find_element( $object_array['LOGIN']['Password'])
     remember_me=@browser.find_element( $object_array['LOGIN']['RememberME'])
     submit= @browser.find_element($object_array['LOGIN']['Submit'])
    end



#Added methods in this class like
    def loginas(uname,pass)
      username.send_keys uname
      password.send_keys pass
      remember_me.click
      submit.click      
    end #loginas_siteadmin

Created Tests file Login_tests.rb

    lp=LoginPage::new(@browser)
    lp.navigate
    lp.loginas('SiteAdmin','password123')

このようにして、スクリプトと保守が可能になり、最も重要なことに、他の外部の宝石や依存関係から解放されます。

于 2014-01-13T13:57:28.893 に答える