私はamazon.comを自動化していますが、現在ドロップダウンメニューの特定の要素に移動しようとしています。どのようにしてこの要素のxpathを作成しても、WebDriverはリスト内の最初の項目にマウスを移動するだけです。ここでSelenium WebDriver Java - マウスが間違った要素に移動する
は、HTMLコードである:ここで
<div class="nav-template nav-flyout-content nav-tpl-itemList">
<span class="nav-hasPanel nav-item" data-nav-panelkey="InstantVideoPanel" role="navigation" aria-label="Amazon Video">
<span class="nav-text">Amazon Video</span>
</span>
<span class="nav-hasPanel nav-item" data-nav-panelkey="DigitalMusicPanel" role="navigation" aria-label="Amazon Music">
<span class="nav-text">Amazon Music</span>
</span>
<span class="nav-hasPanel nav-item" data-nav-panelkey="AndroidPanel" role="navigation" aria-label="Appstore for Android">
<span class="nav-text">Appstore for Android</span>
</span>
は私のオートメーションコードです:
@Test
public void departmentsDropMusic1() throws Exception {
driver = new FirefoxDriver();
driver.get("https://www.amazon.com");
Thread.sleep(3000L);
WebElement element = driver.findElement(By.xpath("//a[@id='nav-link-shopall']"));
Actions action = new Actions(driver);
action.moveToElement(element).build().perform();
Thread.sleep(3000L);
WebElement dropDown = driver.findElement(By.cssSelector("#nav-flyout-shopAll > div:nth-child(2)"));
if (dropDown.isDisplayed()) {
System.out.println("pass");
} else {
Assert.fail();
}
WebElement musicSubMenu = driver.findElement(By.xpath(//span[contains(text(), 'Amazon Music')]"));
action.moveToElement(musicSubMenu).build().perform();
Thread.sleep(3000L);
ノーに、htmlコードに設けられた各種ラベルを使用して、同様に他のXPathを試してみました利用可能。 WebDriverは最初の要素(aria-label "Amazon Video")のみに移動し、他の要素はリストされません。
興味深いことに、forループを使用してメニュー内のすべての項目を移動すると、問題はありません。
正確に何が起こっていますか?マウスを他のメニュー項目に移動しようとするとエラーが発生しますか? – alecxe
私はそれを推測すると、同じxpathを持つ複数の要素があります。したがって、セレンは、デフォルトでマウスがそのxpath(通常はDOMのトップエレメント)で最初に特定された要素に移動します。 xpathの特定の出現を指摘するために、xpathの索引を使用することができます。 –
[**スクリーンショットのHTMLまたはコードまたはエラーが悪い理由です**](https://meta.stackoverflow.com/questions/303812/discourage-screenshots-of-code-and-or) - エラー)。フォーマットされたテキストベースのHTMLおよびコードトライアルで質問を更新することを検討してください。 – DebanjanB