【问题标题】:Selenium drop down issue in javajava中的Selenium下拉问题
【发布时间】:2012-11-21 08:44:20
【问题描述】:

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

说我有一个显示子菜单的主菜单,单击子菜单它显示第三个菜单,其中有 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();

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

【问题讨论】:

  • 请注意,您不需要从树的最顶端开始,即您不必从html 开始并通过HTML 一直到您的元素。此外,您的 XPath 很大程度上基于元素的位置,这可能是问题的一半。
  • 不幸的是,我只有 500 个字符,我无法粘贴整个内容,所以部分代码在下面的评论中,
  • Request /Approvals
  • 完整的 xpath 应该没有问题,可以说当我在同一个浏览器上运行它时,如果我错了,请纠正我
  • 不,你是对的,它可能不是,但它更像是一个小费。您可以编辑您的问题以放入您的 HTML,不要将其发布在 cmets 中。
  • 标签: java selenium webdriver selenium-webdriver


    【解决方案1】:

    为 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# 代码 sn-p 和亚马逊网站)

            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 (level1),然后通过 TopMenu 通过 Level1 单击 Item2

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

    【讨论】:

    • a:contains('Menu') 是否查看锚标签?抱歉,我没有得到这个,你能解释更多吗?在我的情况下,它们是 li 和 span 标签
    • Request /Approvals 我点击请求/批准
  • 是的,伙计...它确实会查看 Anchor 标签。在您的情况下,您使用 "li" 进行排序,但在内部,您的代码也有 Anchor 标签供参考。所以它也应该适用于您的 HTML 代码。 虚拟
  • 第三次鼠标悬停实际上并不是点击它或提交表单
  • 指的是第二种方法...您的意思是点击 SubItem2 的第三行吗?还是第二行???
  • river.FindElement(By.LinkText("SubItem2")).Click();这是actullay 不工作
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签