Java 查找定位程序时遇到问题Selenium Webdriver-IE8。无法在菜单中导航

Java 查找定位程序时遇到问题Selenium Webdriver-IE8。无法在菜单中导航,java,selenium,xpath,Java,Selenium,Xpath,我真的很想自己找到解决方案,但是在20多个小时和数百个网页(以及几本Selenium书籍)之后,我不得不请求您的帮助 大问题:Web应用仅在IE8中工作。Firebug Lite由于某些原因无法使用它 我试图完成的目标和遇到的问题: 我有一个有几帧的页面。其中一个框架包含一个菜单。我需要单击其中一个选项来展开它并访问子菜单的条目,然后我可以单击所需的子菜单条目。当所有这些都完成后,我可以访问右侧框架中的不同信息。我已经尝试通过linkText、图像id和xpath查找元素 以下是IE开发者工具中

我真的很想自己找到解决方案,但是在20多个小时和数百个网页(以及几本Selenium书籍)之后,我不得不请求您的帮助

大问题:Web应用仅在IE8中工作。Firebug Lite由于某些原因无法使用它

我试图完成的目标和遇到的问题:
我有一个有几帧的页面。其中一个框架包含一个菜单。我需要单击其中一个选项来展开它并访问子菜单的条目,然后我可以单击所需的子菜单条目。当所有这些都完成后,我可以访问右侧框架中的不同信息。我已经尝试通过linkText、图像id和xpath查找元素

以下是IE开发者工具中结构的HTML代码:

我看了四页才到这里。由于该代码不相关,我不会粘贴它。下面的代码显示了我如何尝试获取正确的Xpath

List<WebElement> allXpathElem = driver.findElements(By.xpath("//frameset"));
     System.out.println("XPath elements number: " + allXpathElem.size());

for(int i=0; i < allXpathElem.size(); i++)
    System.out.println("XPath element " + (i+1) + ": " + allXpathElem.get(i));
List allXpathElem=driver.findElements(By.xpath(“//frameset”);
System.out.println(“XPath元素编号:+allXpathElem.size());
对于(int i=0;i
在一些鬼混之后:

driver.switchTo().frame(driver.findElement(By.xpath("//frameset/frame[1]")));

List<WebElement> nextStepElem = driver.findElements(By.xpath("//frameset/frame[1]/div"));
System.out.println("XPath elements number: " + nextStepElem.size());
for(int i=0; i < nextStepElem.size(); i++)
        System.out.println("XPath element " + (i+1) + ": " + nextStepElem.get(i));
driver.switchTo().frame(driver.findElement(By.xpath(“//frameset/frame[1]”));
List nextStepElem=driver.findElements(By.xpath(“//frameset/frame[1]/div”);
System.out.println(“XPath元素编号:+nextsteplem.size());
对于(int i=0;i
无论我在/frame之后键入什么,它都返回XPath元素编号:0。您能帮我找出如何找到某个条目下的所有XPath元素吗?例如,我如何找出可以在帧/?之后的所有元素

我的最终目标是遍历整个路径,以便单击子菜单链接(例如客户端字母),相应的内容显示在右侧框架中。我有比XPath更好的方法吗

谢谢大家!

您的问题在于:

driver.switchTo().frame(driver.findElement(By.xpath("//frameset/frame[1]")));
List<WebElement> nextStepElem = driver.findElements(By.xpath("//frameset/frame[1]/div"));
更新: 从HTML的屏幕截图(注意文本的屏幕截图没有帮助-总是以文本的形式提供文本!)可以看出有两个嵌套的框架。您必须遍历所有帧才能到达元素:

driver.switchTo().frame(0);//这将使您进入框架src=“english/index.htm”
driver.switchTo().frame(0);//这会将您放入frame name=“menuserverFrame”中
List-nextStepElem=driver.findElements(By.xpath(“//div”);

谢谢您的回复!刚刚尝试了您的建议,得到XPath元素编号:0。我以前试过这个。我觉得自己像个视力受损的人在试图找到自己的路!无论如何谢谢你!非常感谢。根据你的建议,我设法访问了/div-33;-)!我选择了所需的div,单击webelement,列表展开。多亏了你,我又向前迈了一步。现在我必须弄清楚如何使用/span和/div组合,以便单击子菜单条目。由于更新很有用,我将增加您的答案;-)。再次感谢!我知道了!因为你的建议是找到最终解决方案的触发点;-)我将把你的答案记为最终答案。非常感谢!根据,它们本机不支持XPath。我不确定Selenium是如何将XPath转换为Sizzle的,但有理由认为可能存在一些问题。其他web驱动程序(如Firefox或Chrome)是否也存在同样的问题?此外,您可以尝试获取任何文档的根,即使用XPath
/*
。如果返回零个元素,您就知道XPath不工作,或者输入不被视为“文档”。谢谢Abel!不幸的是,我不能尝试Firefox或Chrome,因为该应用程序只能在IE8中运行。在您尝试/*I get:XPath元素编号:1 XPath元素1:[[InternetExplorerDriver:WINDOWS上的internet explorer(29e8507f-252e-4ac7-9129-29850e525977)]->XPath:/*]之后的第二条评论中,尝试进一步遍历,并检查元素的名称。也就是说,
/*/*
将返回一级深度的所有元素。试着了解你所处的结构。我假设您知道有两个嵌套的帧集要移动,必须有两个
切换到
@阿贝尔尝试了“/*/*”。获取XPath元素编号:2 XPath元素1:[[InternetExplorerDriver:WINDOWS上的internet explorer(3a3d8fba-dfb5-4621-afb0-9bf5c18587f8)]->XPath://*/*]XPath元素2:[[InternetExplorerDriver:WINDOWS上的internet explorer(3a3d8fba-dfb5-4621-afb0-9bf5c18587f8)]->://*]。是的,我知道我必须
切换到()
,但是我如何确定要选择哪个
/*/*
?或者我应该使用
/*/*[1]
?如果我们忘记了XPath,还有其他方法可以推荐吗?
List<WebElement> nextStepElem = driver.findElements(By.xpath("//div"));
...
driver.switchTo().frame(0);  // this puts you inside frame src="english/index.htm"
driver.switchTo().frame(0);  // this puts you inside frame name="menuserverFrame"
List<WebElement> nextStepElem = driver.findElements(By.xpath("//div"));