老实说,我想自己找到解决方案,但经过二十多小时和数百个网页(以及一些Selenium书籍),我不得不向你寻求帮助。
大问题:仅在IE8中运行的网络应用程序。 Firebug Lite由于某种原因没有使用它。
我想要完成什么以及遇到的问题:
我有一个有几帧的页面。其中一个框架包含一个菜单。我需要单击其中一个选项以展开它并访问子菜单的条目,然后我可以单击所需的子菜单条目。完成所有这些后,我可以访问右侧框架中的不同信息。我试过通过linkText,image id,xpath找到元素。
以下是IE Developer Tools中结构的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));
经过一番愚弄:
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));
无论我在 / frame 1 之后输入什么,都会返回 XPath元素编号:0 。你能帮我弄清楚如何找到某个条目下的所有XPath元素吗?例如,如何查找框架1 /?之后的所有元素?
我的最终目标是遍历整个路径,以便我可以单击子菜单链接(例如客户端字母),相应的内容将显示在右侧框架中。我有比XPath更好的方法吗?
谢谢!
答案 0 :(得分:2)
你的问题在这里:
driver.switchTo().frame(driver.findElement(By.xpath("//frameset/frame[1]")));
List<WebElement> nextStepElem = driver.findElements(By.xpath("//frameset/frame[1]/div"));
在.switchTo()
一帧后,您现在只查看该帧内的元素。第二行应该是:
List<WebElement> nextStepElem = driver.findElements(By.xpath("//div"));
...
更新: 从HTML的屏幕截图(注意文本的截图没有帮助 - 始终提供文本作为文本!),它出现了两个嵌套框架。您将必须遍历所有帧以获取您的元素:
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"));