1

JDev を使用して、Java で変換された Selenium 2.0 スクリプトを実行しています。モーダル ウィンドウを開いて次のような文字列を検索する%SomeText%と、同じウィンドウでそのすぐ下にレコードが表示される場合があります。ここで、探しているテキストが表示されていることを確認し、そのテキストが表示されたらモーダル ウィンドウで [OK] をクリックします。それを行う方法についてのアイデア...私は次のことをしています:

//this is working
driver.findElement(By.id("_afrFilterpt1_afr__UISatr_afr_0_afr_AT1_afr__ATp_afr_t2_afr_c3::content")).sendKeys(Keys.RETURN); 

//this doesn't work, text given here is part of the text which is returned after search
assertTrue((driver.findElements(By.xpath("contains(text(),'Approved:Create Grade Ladder (AU_New Grade Ladder205, 2012-08-31)')")).size() > 0) ? true:false); 

//this works if above line is deleted, else this also does not work
driver.findElement(By.xpath("//button[text()='OK']")).click();  
4

1 に答える 1

1

2 行目を書くもう 1 つの方法は、driver.getPageSource().contains(text); です。

第 2 に、参照ノードが xpath に提供されていないため、「Approved:Create Grade Ladder (AU_New Grade Ladder205, 2012-08-31)」を含むルート ノードを探しているため、xpath が正しくありません。

つまり、次のようなマークアップを探しているということです。

<html>
  Approved:Create Grade Ladder (AU_New Grade Ladder205, 2012-08-31)
</html>

w3schools から xpath を学んだ場合、これは少し混乱するように聞こえるかもしれませんが、ディレクトリによく似ています。

デフォルトでは、参照は / で始まります。したがって、これを行うには、タグに検索対象のテキストが含まれている必要があります。これに加えて、text() は現在のノードのテキストのみを提供し、その下のノードは提供しません。

次の例を見てください

<html>
  <body>
   <div>Some text <span>with a span</span>.</div>
  </body>
</html>

もしそうなら、あなたはdriver.findElements(By.xpath("//div[contains(text(),'Some text with a span.')]")).size();それが0に等しいことがわかるでしょう.

xpath を使用してテキスト ノードを選択すると、その理由がわかります。下の画像を参照してください。 Xpath の例

于 2012-09-03T14:38:39.067 に答える