SeleniumとJavaを介して<md-select>ドロップダウン内で「電話をかけて電話をかける」というテキストの付いた要素をクリックする方法

タイプドロップダウンを持つアプリケーションを自動化しようとしています。 私は以下のようにすべての可能な組み合わせを試みましたが、ドロップダウンリストから要素を選択することができませんでした。

driver.findElement(By.xpath("//span[@aria-label=\"Phone to call with\"]"));

xpathはリロードによって変化し続けるため、IDでxpathを見つけることができません。

enter image description here

以下はHTMLコードです。どのように私は同じを達成するでしょうか?


0

4 答え

このxpathはあなたのhtmlのために働きます:

By.xpath("//md-select[normalize-space(@aria-label='Phone to call with')]")

あるいはccs selectorを使うこともできます。

By.cssSelector("md-select[aria-label*='Phone to call with']")

たとえば「ハングアウト」というテキストでオプションを見つけるには、次のようにします。

By.xpath("//md-select[normalize-space(@aria-label='Phone to call with')]//md-option[normalize-space(.)='Hangouts']")

ドロップダウンを選択するには、以下のActionクラスまたは2つのメソッドを使用します。必要な待機を実装します。 1.ドロップダウンを開くための特別なボタンがなく、ドロップダウンをクリックすると開くことができると思います。 2. JavaScriptを使用します。

WebElement selectMenu = driver.findElement(By.xpath("//md-select[normalize-space(@aria-label='Phone to call with')]"));
WebElement option = driver.findElement(By.xpath("//md-select[normalize-space(@aria-label='Phone to call with')]//md-option[normalize-space(.)='Hangouts']"));

//1. first click to open dropdown, second click on option
selectMenu.click();
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(option)).click();

//2. select using javascript
((JavascriptExecutor) driver).executeScript("arguments[0].click();", option);
1
追加された
ありがとうございます。 selectMenuをクリックしてもこの方法では機能しないため、要素オプションが見つからないというエラーが発生します。 Google Voiceの通話ボタンをクリックするとアクティブになるポップアップウィンドウです。ウィンドウハンドラを使うように切り替えようとしましたが、ウィンドウが1つしか見えません。
追加された 著者 sKen,
私は以下のようにいくつかの修正を加えました、そして今私はドロップダウンを見ることができます、そしてそれは新しいオプションをハイライトしますが、それを選択しません。問題のスクリーンショットを更新しました。 WebElementオプション= driver.findElement(By.xpath( "// md-option [正規化スペース(。)=&zwnj; 'Phone 2']")); ((JavascriptExecutor)driver).executeScript( "arguments [0] .click();"、option);
追加された 著者 sKen,
selectMenuをクリックした後にhtmlを共有する
追加された 著者 Sers,
まずはクリック可能になるまで待ってから@Debanjanの回答を見て、次に単純なclick - option.click()を使ってください。私の更新された答えをチェックし、私はwaitを加えました
追加された 著者 Sers,

電話をかけるにテキストが含まれている要素をクリックするには、目的の要素をクリック可能にする WebDriverWait を誘導する必要があります。 次の解決策

new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//md-select[@class='ng-pristine ng-valid ng-empty ng-touched']/md-select-value[@class='md-select-value md-select-placeholder' and starts-with(@id,'select_value_label_')]//span[contains(.,'Phone to call with')]"))).click();
0
追加された

xpathの下でこれを使ってみてください。

driver.findElement(By.xpath("//span[contains(@aria-label,Phone to call with']"));
0
追加された
@manjulamanju同じ質問に複数の(同一の)答えを投稿しないでください。代わりに、よく研究された回答を1つ公開してください。必要に応じて自由に編集して他の回答を削除してください。
追加された 著者 DebanjanB,
ありがとうございます。私はこれを試してみましたそれは動作しません線量。その要素を見つけることができません。
追加された 著者 sKen,

そのドロップダウンがdivタグによって開発されている場合は、アクションクラスメソッドを使用してそれを自動化する必要があります。可能な場合はそのページを送信できます。

0
追加された
ありがとうManjula!電話をかけるのはGoogle Voiceアプリケーションです。 [通話]をクリックすると、この子ウィンドウのドロップダウンから携帯電話番号またはハングアウトのいずれかを選択するよう求められます。
追加された 著者 sKen,