由于隐藏了菜单和子菜单,因此元素不可见

时间:2014-05-07 20:56:16

标签: selenium selenium-webdriver

我想打开cric信息,然后在子菜单打开时点击“live score”菜单,点击“桌面记分牌”。

但问题是实时得分菜单是隐藏的div下。 即这个div在td

之下

“您可以检查页面结构以获取详细信息”

所以当我尝试使用driver.findElementBy(“xpath”)单击菜单元素时,我得到的元素不可见异常。

所以我直接使用开发人员mopen('m2')使用的javascript来完成打开菜单的工作,但在此之后我执行命令再次找到子菜单元素时得到相同的错误“元素不可见异常”

尝试通过执行jscript使div可见。

PFB我使用的代码:

FirefoxDriver d1=new FirefoxDriver();
    d1.get("http://www.cricinfo.com");
    ((JavascriptExecutor) d1).executeScript("mopen('m2')");
    ((JavascriptExecutor) d1).executeScript("document.getElementById('m2').style.visibility='visible';");
    ((JavascriptExecutor) d1).executeScript("document.getElementById('m2').style.display='block';");
    d1.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
    d1.findElementByXPath("//*[@id='mgDdRht']/tbody/tr[3]/td/a").click();

还尝试使用Actions类,但一切都是徒劳的,非常感谢帮助 提前谢谢。

2 个答案:

答案 0 :(得分:0)

您应该可以使用Action链执行此操作:

Actions builder = new Actions(d1);
Action clickSubMenu = builder.moveToElement(d1.findElement(By.cssSelector(".Nav td:nth-child(2).navLinks")))
    .moveToElement(d1.findElement(By.cssSelector("#m0 td:nth-child(1)#mgDd>table:nth-child(1)>tbody:nth-child(1) td:nth-child(2).PopupTabs")))
    .click(d1.findElement(By.xpath("//*[@id='mgDdRht']/tbody/tr[3]/td/a"))).build();

clickSubMenu.perform();

我在c#中对此进行了测试,这对我有用。我把它翻译成Java,但我可能犯了一个语法错误。道歉,如果我有。

我发现我需要转移到系列赛。然后我不得不转移到系列 - 下拉版本,因为系列的下拉版本与非下拉版本不同。然后我就可以移动到西印度群岛的链接,然后点击它。

答案 1 :(得分:-1)

我终于可以点击子菜单了:)

我上面发布的代码的问题是在子菜单的xpath中,即如果你要去cricinfo并检查不同菜单子菜单的xpath,那么所有都将具有相同的xpath,所以我们需要从html生成xpath拥有,因此webdriver将能够区分我们想要单击的元素,这将解决单击菜单后单击隐藏子菜单的目的。如果要单击菜单(构建自己的xpath),这同样适用

1)对于点击菜单,使用开发人员使用的javascript函数,在菜单触发后,子菜单变为可见,单击元素。

2)正如Richard所建议的那样,使用Actions类来模拟鼠标悬停事件直到root元素,然后我们必须单击子菜单。

1)

FirefoxDriver d1=new FirefoxDriver();
    d1.get("http://www.cricinfo.com");
    ((JavascriptExecutor) d1).executeScript("mopen('m2')");
    d1.manage().timeouts().implicitlyWait(15,TimeUnit.SECONDS);
    d1.findElementByXPath("//div[@id='m2']/table/tbody/tr[2]/td[2]/table/tbody/tr[3]/td/a").click();

2)

     FirefoxDriver d1=new FirefoxDriver();
d1.get("http://www.cricinfo.com");
d1.manage().timeouts().implicitlyWait(15,TimeUnit.SECONDS);
String xpath_root=("//div[@id='m2']/table/tbody/tr[1]/td/table/tbody/tr[1]/td[2]/a");
String xpath_sub=("//div[@id='m2']/table/tbody/tr[2]/td[2]/table/tbody/tr[3]/td/a");
WebElement root=d1.findElementByXPath(xpath_root);
WebElement sub=d1.findElementByXPath(xpath_sub);
Actions builder=new Actions(d1);
builder.moveToElement(root).build().perform();
sub.click();

感谢Richard .....阅读完解决方案后,我尝试使用动作类。在此之前,我不确定是否可以使用隐藏菜单。