java - java中的Selenium下拉问题

标签 java selenium webdriver selenium-webdriver

我有一个网站,我正在尝试自动化我可以登录并单击其中一个菜单,但是当我单击第三个子项时我遇到了问题

假设我有一个显示子菜单的主菜单,点击子菜单显示第三个菜单,其中有 10 个链接按自上而下的顺序显示,我点击了第 9 个子菜单,但我无法执行。

代码如下:

WebElement myElement1 = driver.findElement(By.xpath("/html/body/form/div[5]/div/div[2]/table/tbody/tr/td[2]/div/div/ul/li/ul/li[2]/span/span/span"));
Actions builder = new Actions(driver);
builder.moveToElement(myElement1).build().perform();
myElement1.click();

WebElement myElement2 = driver.findElement(By.xpath("/html/body/form/div[5]/div/div[2]/table/tbody/tr/td[2]/div/div/ul/li/ul/li[2]/ul/li/span/span/span"));
Actions builder1 = new Actions(driver);
builder1.moveToElement(myElement2).build().perform();
myElement2.click();

WebDriverWait wait = new WebDriverWait(driver, 40);
WebElement ele = driver.findElement(By.xpath("/html/body/form/div[5]/div/div[2]/table/tbody/tr/td[2]/div/div/ul/li/ul/li[2]/ul/li/ul/li[9]/a/span/span"));
System.out.println(ele.getText());

WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("/html/body/form/div[5]/div/div[2]/table/tbody/tr/td[2]/div/div/ul/li/ul/li[2]/ul/li/ul/li[9]/a/span/span")));
System.out.println(" about to get enter time sheet" + element.getText());
System.out.println(isElementPresent(By.xpath("/html/body/form/div[5]/div/div[2]/table/tbody/tr/td[2]/div/div/ul/li/ul/li[2]/ul/li/ul/li[9]/a/span/span")));
driver.manage().timeouts().implicitlyWait(2500, TimeUnit.SECONDS);
org.openqa.selenium.Point coordinates = driver.findElement(By.xpath("/html/body/form/div[5]/div/div[2]/table/tbody/tr/td[2]/div/div/ul/li/ul/li[2]/ul/li/ul/li[9]/a/span/span")).getLocation();
System.out.println(coordinates.getX() + " " + coordinates.getY());
WebElement myElement3 = driver.findElement(By.xpath("/html/body/form/div[5]/div/div[2]/table/tbody/tr/td[2]/div/div/ul/li/ul/li[2]/ul/li/ul/li[9]/a/span/span"));
Actions builder3 = new Actions(driver);
builder3.moveToElement(myElement3).build().perform();
myElement3.click();

最后一个下拉菜单失败了。

最佳答案

为 selenium 2.0 提交了类似的错误并且已经关闭。请引用最新的 selenium 稳定版本。

让我们引用下面的 2 级菜单下拉菜单。

Menu
  Item 1
      SubItem1
      SubItem2
  Item 2

我会建议解决这个问题的两种方法

方法 1: 从您的上述代码中,我看到为 Level1 菜单项和 Level2 菜单项定义了点击事件。而是直接引用 2 级项目而不单击 1 级项目,如下所示:

Menu.click();
Actions Build = new Actions(driver);
Build.moveToElement(Menu).moveToElement(Item1).moveToElement(SubItem2).click().build().perform();

方法 2 JavaScript 方式,但点击页面上的菜单项是一种安全的解决方法。

js.ExecuteScript("return $(\"a:contains('Menu')\").mouseover();");
js.ExecuteScript("return $(\"a:contains('Item1')\").next(':eq(1)').mouseover();");
driver.FindElement(By.LinkText("SubItem2")).Click();

这是使用方法 1 的实例...(C# 代码片段和亚马逊网站)

        IWebDriver driver = new InternetExplorerDriver();
        driver.Navigate().GoToUrl("http://www.amazon.com/gp/goldbox/ref=cs_top_nav_gb27");
        driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));

        IWebElement Menu = driver.FindElement(By.Id("nav-bar-inner")).FindElement(By.Id("nav-shop-all-button"));
        Menu.Click();

        IWebElement Item1 = driver.FindElement(By.Id("nav_cat_4"));
        Actions Build = new Actions(driver);
        Build.MoveToElement(Menu).MoveToElement(Item1).Click().Build().Perform();

        IWebElement SubItem = driver.FindElement(By.Id("nav_subcats_4")).FindElement(By.LinkText("Games"));
        Build.MoveToElement(Menu).MoveToElement(Item1).MoveToElement(SubItem).Click().Build().Perform();

这是亚马逊网站的示例,最初它首先点击顶部菜单,然后点击 Item1(级别 1),然后通过 TopMenu 通过 Level1 点击 Item2

我希望这会有所帮助....祝一切顺利:)

关于java - java中的Selenium下拉问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13489368/

相关文章:

java - GXT - 在项目范围内输入时发送表格

java - String.replaceAll 忽略正则表达式

java - 是否正在创建一个私有(private)构造函数来测试不良做法?

python - selenium.common.exceptions.InvalidArgumentException : Message: invalid argument error invoking get() with urls read from text file with Selenium Python

java - 当页面第一次加载时,webdriver需要很长时间才能找到第一个元素。

java - Akka 父级没有收到子级的消息

ruby-on-rails - Capybara-selenium 故障并重定向 example.com/when 没有一切都是绿色的

python - 修改 selenium python 绑定(bind)中的语言选项时遇到问题

selenium - 在 Codeception Webdriver 中验证 CSS 值

c# - Selenium 2/Webdriver - 如何双击表格行(打开一个新窗口)