3

Seleniumを使用して物事を自動化しています。以下のように Dynamic Xpath を処理するには、あなたの助けが必要です:

Driver.findElement(By.xpath("//[@id='INQ_2985']/div[2]/tr/td/div/div[3]/div")).click();

上記のように、各実行中に、などにINQ_2985変更されます298629872988

HTML コード:

< div> class="context-menu-item-inner" style="background-image:url(../images/productSmall.png);">Tender Assignment < /div> 

以下のようにさまざまな組み合わせを試しましたが、成功しませんでした:

// Driver.findElement(By.name("//input[@name='Tender Assignment']")).click();
//  Driver.findElement(By.className("context-menu-item-inner")).click();` 

これについて私を助けてもらえますか。

4

6 に答える 6

1

contains()またはstarts-with()をxpathで使用してみることができます。

上記の xpath は次のように書き換えることができます。

Driver.findElement(By.xpath("//*[starts-with(@id,'INQ')]/div[2]/tr/td/div/div[3]/div")).click() ;

html をもっと投稿していただければ、xpath の改善に役立てることができます。

  • さらに、このような長い xpath を使用することはお勧めできません。これにより、テストがより頻繁に失敗する可能性があります。

たとえば、「新しいテーブル データまたは div」が UI に追加された場合、上記の xpath は無効になります

  • id、class、またはその他の属性を使用して、見つけようとしている要素に近づく必要があります
  • 私は個人的に使用cssSelectorsすることをお勧めしますxpath
于 2013-11-12T07:40:09.097 に答える
1

よく使う正規表現

driver.findElement(By.xpath("//*[contains(@id,'INQ_')]")

注: 名前が INQ_ で始まる単一の ID がある場合は、要素に対してアクションを実行できます。一連の ID の場合は、 として抽出しList<WebElements>、要素の特定のテキストと一致させることができます (element.getText().trim() =="Linked Text"一致した場合はアクションを実行します。他のロジックに従ってトラバースして一致させることができます。

于 2015-12-17T20:58:03.123 に答える
1

多くの方法を使用でき、暗黙の待機を使用できます。

driver.findElement(By.xpath("//*[contains(@id,'select2-result-label-535')]").click();

driver.findElement(By.xpath("//*[contains(text(), 'select2-result-label-535')]").click();
于 2015-12-17T14:17:26.400 に答える
0

最良の選択は、firebug を介して簡単に取得できる id の代わりに完全な xpath を使用することです。

例えば

/html/body/div[3]/div[3]/div[2]/div/div[2]/div[1]/div/div[1]
于 2015-03-30T18:11:41.693 に答える