Selenium webdriver-无法点击子菜单 - amazon.in

时间:2014-11-10 09:22:38

标签: selenium-webdriver click submenu

我想点击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&amp;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();

请告诉我它为什么不起作用?

1 个答案:

答案 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\"]"));

注意: - 在上文中,我使用了所有图书作为要点击的文字。
此文字必须与网页中显示的内容完全一致。
同样,您可以将所有图书替换为其他文字,例如“畅销书,新版本和预购等”。