2011-12-30 5 views
1

ラジオボタンで選択されたオプションのリストを含むページを持つサイトを自動化しています。ラジオの1つを選択すると、テキストフィールドと選択リストが表示されます。PageObject Rubyでテキストフィールドにテキストを設定すると、メインファイルでしか機能しません。

テスト(ruby test_contracting.rb)と私のページを表す他のいくつかのクラスを実行するファイル(test_contracting.rb)を作成しました。

私のクラスContractPageで、私は以下の要素宣言があります。

def configure_domain(config={}) 
     check_option_sub_domain 
     domain = config[:domain] 
     tld = config[:tld] 
    end 

checkbox(:option_sub_domain, :id => "option_sub_domain") 
    text_field(:domain, :id => "domain_text") 
    select_list(:tld, :id => "domain_tld") 

を私はContractPageに、このようなドメインの構成を設定するメソッドを作成しました私は、test_contracting.rbからconfigure_domainメソッドを呼び出し、ラジオボタンを選択しますが、フィールドに値を入力しません。 paramsはメソッドに正しく入っています。私はそれを "puts"を使ってチェックしました。たとえ私がparamを "bla"のような一般的な文字列に変更しても、それは動作しません。面倒な点は、test_contracting.rb上で全く同じコンポーネントを呼び出すと動作するということです。

domain_element.value = config[:domain] 
tld_element.send_keys config[:locaweb_domain] 

は、それが働いた:私は仕事に見つけたもの

my_page_instance = ContractPage.new(browser) 
my_page_instance.domain = "bla" 
my_page_instance.tld = ".com" 

はconfigure_domain方法では、次のよう実装することでした。

私はリファレンスとして使用していPageObjectsモジュールのドキュメントは、ここで見つけることができます:http://rubydoc.info/github/cheezy/page-object/master/PageObject/Accessors#select_list-instance_method

君たちは、Pageオブジェクトによって生成されたメソッドの自動オブジェクトのdidntの値を設定する理由は上の任意のexplationを持っていますかこのスコープ/コンテキストで作業しますか?

ところで、友人はJavaで同じことを試しても失敗しました。

答えて

2

私はセレンとページオブジェクトのこの世界にはかなり新しいですが、私の最近の発見の1つがあなたを助けてくれるかもしれません。

私はselect_listフィールドの割り当て方法は私が正面で "self"を使い始めた後にしか働かないことがわかりました。これは私がページオブジェクトコード内でアクセスするために使用したものです。例:self.my_select_list = "私の選択リストの値"

別の注意 - あなたが言及したsend_keysの回避策は賢明であり、多くの用途のためのトリックを行うかもしれませんが、私の場合、選択リストの値は可変であり、同じ文字で始まるいくつかのオプション。

ここにあるものがあなたに役立つことを願っています。

UPDATE(月3/12)

ダイビングでは、さらに、実際には、私はまだここに同じ制限がありますので、私は、SELECT_LISTセットもsend_keysを使用していることを発見したページオブジェクトの実際のRubyコードに私はsend_keysの回避策を直接使用していると述べています。 sighそんなに勉強することはあまりありません。

3

ルビーでは、すべて等しいメソッド(=記号で終わるメソッド)にはレシーバが必要です。理由を示すコードをいくつか紹介しましょう。ここで値をローカル変数を設定するコードは次のとおりです。ルビーは、あなたが呼び出していることを知るためには

domain = "blah" 

domain = "blah" 

、ここでは、ドメイン=メソッドを呼び出すコードがありますメソッドを使用して、受信者を追加する必要があるローカル変数を設定するのではなく、上記のメソッドをこれに変更するだけで動作します:

def configure_domain(config={}) 
    check_option_sub_domain 
    self.domain = config[:domain] 
    self.tld = config[:tld] 
end 
関連する問題