1

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

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

私のクラス ContractPage には、次の要素宣言があります。

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

ContractPage で、ドメインの構成を次のように設定するメソッドを作成しました。

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

test_contracting.rb から configure_domain メソッドを呼び出すと、ラジオ ボタンが選択されますが、フィールドに値が入力されません。パラメータはメソッドに正しく取り込まれています。「puts」を使用して確認しました。パラメータを「bla」のような一般的な文字列に変更しても機能しません。厄介な点は、test_contracting.rb でまったく同じコンポーネントを呼び出すと、機能することです。

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

私がうまくいったのは、configure_domain メソッドで以下を実装することでした。

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

その後、うまくいきました。

私が参照として使用している PageObjects モジュールのドキュメントは、 http ://rubydoc.info/github/cheezy/page-object/master/PageObject/Accessors#select_list-instance_method にあります。

オブジェクトの値を設定するためにページオブジェクトによって自動生成されたメソッドがこのスコープ/コンテキストで機能しなかった理由について説明がありますか?

ちなみに、友人が Java で同じことを試みましたが、同様に失敗しました。

4

2 に答える 2

3

Ruby では、すべての equals メソッド (= 記号で終わるメソッド) にレシーバーが必要です。その理由を示すコードをいくつか示します。ローカル変数に値を設定するコードは次のとおりです。

domain = "blah"

domain= メソッドを呼び出すコードは次のとおりです。

domain = "blah"

ローカル変数を設定する代わりにメソッドを呼び出していることを ruby​​ が認識するためには、レシーバーを追加する必要があります。上記の方法をこれに変更するだけで機能します。

def configure_domain(config={})
    check_option_sub_domain
    self.domain = config[:domain]
    self.tld = config[:tld]
end
于 2012-05-12T12:23:00.093 に答える
2

私はこのSeleniumとページオブジェクトの世界にかなり慣れていませんが、最近の発見の1つが役立つかもしれません。

select_listフィールドの割り当て方法は、前に「self」を使い始めて初めて機能することがわかりました。これは、ページオブジェクトコード内でアクセスするために使用したものです。例:self.my_select_list = "my select list value"

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

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

更新(1月3/12)

ページオブジェクトの実際のRubyコードをさらに詳しく調べてみると、select_listセットもsend_keysを使用していることがわかりました。したがって、実際には、send_keysの回避策を直接使用して指摘したものと同じ制限があります。 ため息 をつく学ぶことはたくさんあるので、時間はほとんどありません!

于 2012-01-02T18:52:36.617 に答える