Java 为什么XPath在IE中不起作用?

Java 为什么XPath在IE中不起作用?,java,eclipse,selenium,internet-explorer,webdriver,Java,Eclipse,Selenium,Internet Explorer,Webdriver,我正在尝试使用XPath查找元素。它在Chrome浏览器上运行得非常完美,但在InternetExplorer上却不是那么完美 在Chrome上,它工作得很好,但是当我尝试为IE运行它时,我得到以下错误 线程“main”org.openqa.selenium.NoSuchElementException中的异常:找不到xpath==html/body/form/div[3]/div[2]/div/div[2]/a的元素 这可能是什么原因造成的?我已经修复了最常见的IE错误,如设置“保护模式”和“

我正在尝试使用XPath查找元素。它在Chrome浏览器上运行得非常完美,但在InternetExplorer上却不是那么完美

在Chrome上,它工作得很好,但是当我尝试为IE运行它时,我得到以下错误

线程“main”org.openqa.selenium.NoSuchElementException中的异常:找不到xpath==html/body/form/div[3]/div[2]/div/div[2]/a的元素


这可能是什么原因造成的?我已经修复了最常见的IE错误,如设置“保护模式”和“缩放”功能。

因为嵌入浏览器的XPath引擎是由每个浏览器供应商自己实现的,实际上它们在实现上有所不同。对于早期的IE,如6和7不是嵌入XPath引擎。如果在未嵌入XPath引擎的浏览器上使用XPath,Selenium将使用自身XPath库来执行XPath,Selenium XPath库不会实现所有XPath功能,并且与其他浏览器的XPath引擎也有区别

回到你的问题上,你一开始错过了一个萨尔什舞,应该是

/html/body/form/div[3]/div[2]/div/div[2]/a
因为
HTML
节点是HTMLDOM树的根,所以您应该将
/
放在头上,告诉xpath从根节点开始

或者可以在xpath中省略html:
//body/form/div[3]/div[2]/div/div[2]/a


因为它是一个真实的
HTML
节点,它是各种浏览器上HTML Dom树的根

将xpath转换为css。Xpath可以在不同的浏览器之间变化,其中作为CSS选择器的浏览器通常是相同的跨浏览器。因此,使用铬进行检查不会是一个问题

html>body>form>div:n个孩子(3)>div:n个孩子(2)>div>div:n个孩子(2)>a


XPath和IE也因其问题而闻名。如果必须使用xpath,请阅读

您可以尝试的一件事是使用firefox的
firebug
firepath
插件获取xpath,还可以通过增加加载时间,即检查元素之间的
Thread.sleep()
。我提出的第一个想法至少对我有用。如果有任何问题,请告诉我

请阅读,特别是关于(MCVE)的部分,这将帮助您调试自己的程序并自行解决问题。如果您这样做了,但仍然卡住了,您可以回来发布您的MCVE,您尝试了什么,以及执行结果,包括任何错误消息,以便我们可以更好地帮助您。还提供一个指向页面和/或相关HTML的链接。显然,您试图使用的是一个脆弱的绝对xpath。尝试使用逻辑xpath。仅仅因为xpath在一个浏览器中工作并不意味着它一定能在另一个浏览器中工作。您需要查看两个浏览器之间的HTML布局是否有一些变化