我想点击amazon.in中的submneu 我可以扩展主菜单。但无法点击子菜单。我尝试了两种方法。但它显示错误。
邮件类别html代码:
<li class="nav_pop_li nav_cat nav_divider_before" id="nav_cat_2">Books</li>
子类别html
<a href="/Books/b/ref=nav_shopall_books_all?ie=UTF8&node=976389031" class="nav_a nav_item">All Books</a>
我使用了以下方法
方法1
driver.get("http://amazon.in");
driver.manage().window().maximize();
Actions actions = new Actions(driver);
WebElement moveonmenu = driver.findElement(By.xpath("//li[@id='nav_cat_2']"));
actions.moveToElement(moveonmenu).moveToElement(driver.findElement(By.xpath("//a[@class='nav_a nav_item']"))).click().perform();
方法2
driver.get("http://amazon.in");
driver.manage().window().maximize();
//locate the menu to hover over using its xpath
WebElement menu = driver.findElement(By.xpath("//li[@id='nav_cat_2']"));
//Initiate mouse action using Actions class
Actions builder = new Actions(driver);
// move the mouse to the earlier identified menu option
builder.moveToElement(menu).build().perform();
// wait for max of 5 seconds before proceeding. This allows sub menu appears properly before trying to click on it
WebDriverWait wait = new WebDriverWait(driver, 5);
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//a[@class='nav_a nav_item']"))); // until this submenu is found
//identify menu option from the resulting menu display and click
WebElement menuOption = driver.findElement(By.xpath("//a[@class='nav_a nav_item']"));
menuOption.click();
请告诉我它为什么不起作用?
答案 0 :(得分:1)
在“方法1”中,我猜是悬停问题。我必须说,它只是点击“主要类别”元素“。
在方法2“中,”主要类别“的悬停正常发生。唯一的问题是您选择点击”子类别“的xpath 强> .xpath实际上与多个元素相关联。因此,代码失败了。
只需在方法2 中替换以下代码,即可使用: -
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//a[@class='nav_a nav_item' and .=\"All Books\"]")));
和
WebElement menuOption = driver.findElement(By.xpath("//a[@class='nav_a nav_item' and .=\"All Books\"]"));
注意: - 在上文中,我使用了所有图书作为要点击的文字。
(此文字必须与网页中显示的内容完全一致。)
同样,您可以将所有图书替换为其他文字,例如“畅销书,新版本和预购等”。