我想打开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类,但一切都是徒劳的,非常感谢帮助 提前谢谢。
答案 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 .....阅读完解决方案后,我尝试使用动作类。在此之前,我不确定是否可以使用隐藏菜单。