2017-08-17 11 views
0

私はこのような状況にあります。私は、Selenium WebdriverでTestNGというページ・オブジェクトの設計パターンを使ってテスト・フレームワークを構築しています。 私には次のような状況があります。私はどのように私のフレームワークでこれを処理するか分からない。このweb要素をどのように扱うのですか?

ウェブページには、特定の条件によって位置が変わるWeb要素(テキストボックス)があります。私は理解のためにスクリーンショットを添付しました。 ScreenShot-1

上記スクリーンショットの[Qty(Target Qty)]フィールドの下のテキストボックスに入力を入力しようとしています。実際にはテーブルです。しかし、いくつかのシナリオによっては、その下にある[Qty(Target Qty)] &テキストボックスの位置が変わります。下のスクリーンショットを参照してください。

Screenshot2

この使用したページオブジェクトデザインパターンを処理するための最良の方法は何ですか?

次のように考えました。

  • テーブルのすべての要素をリストに入れます。

  • 「Qty(Target Qty)」を探してリストを反復します。取得すると、下のテキストボックスに入力を入力します。

+0

両方の表のHTMLスニペットを貼り付けますか? –

答えて

0

に進みますから、ステップ1をスキップしている間の列数を仮定すると、ページのHTML、あなたのために働く答えを作るのは難しいですが、サンプルのHTMLテーブルhereがあります。私はXPathを書いており、そのためのコードは例として役立つはずです。

このメソッドは、行ラベルと列ラベルを取り込み、参照セルに含まれるテキストを返します。

public String getTextFromTable(String rowLabel, String columnLabel) 
{ 
    return driver.findElement(By.xpath("//table/tbody/tr[count(//tr/th[.='" + columnLabel + "']/preceding::tr) - 1]/td[count(//th[.='" 
      + rowLabel + "']/preceding-sibling::th)]")).getText(); 
} 

あなたは、この方法は、希望ラベルの前に行または列の数をカウントするcount()を使用している

getTextFromTable("Height", "Taipei 101"); 

のようにそれを呼び出します。次に、そのカウントをTRまたはTHコレクションのインデックスとして使用して、目的の要素を見つけます。

ここでは、テーブルを含むページオブジェクトの一部としてメソッドを記述します。列ラベル( "Qty(Target Qty)")と入力Stringの2つのパラメータが必要です。上記のサンプル関数と同様の方法を使用して列インデックスを検索し、入力文字列INPUTsendKeys()を検索します。

0

HTMLを投稿していないので、固定IDがない場合に一般的な考えを示します。

あなたは間の列の可変数を持っているかもしれない、と仮定:

  1. 反復タイトルを通じて(「MPN」、「CPN」など)タイトル「数量(の位置 を見つけるために、目標数量)」を選択します。 (行を繰り返し処理、および<td>要素は「数量(目標数量)」持っている。 カウンタを維持することを忘れないでください をご確認ください。)
  2. これはあなたの列がMPN」の間に存在するどのように多くのアイデアを与えるだろう'と' Qty(目標数量) 'を入力します。

  3. ここで、間に「n」列があるとします。行(タイトルの下)を繰り返し、 'n'番目の要素に移動します。これらが<td>タグの場合は、の2番目の<tr>の項目に移動し、入力ボックスを検索します。あなたが投稿していないので

常に2または3(スクリーンショットに見られるように)、上記と直接ちょうど3

関連する問題