我正在开发一个只与IE7和IE8兼容的应用程序。我不知道为什么,但有些人建议在识别IE中的元素时使用CSS而不是XPath。当我访问官方Selenium网站时。我看了消息
WebDriver尽可能使用浏览器的本机XPath功能。在那些没有本机XPath支持的浏览器上,我们提供了自己的实现。除非您了解各种xpath引擎中的差异,否则这可能会导致一些意外行为。
我想知道在哪里可以找到各种xpath引擎的差异,在哪种情况下我应该使用CSS,以及在哪些XPath中我特意使用IE。感谢。
答案 0 :(得分:12)
根据Ashley Wilson的report from sauce labs:
<强>赞成强>:
它有点过时,但这里是数字:
就个人而言,我会争论(2) - 声明,我必须同意其余部分。
<强>缺点强>:
elem\..\another_elem
答案 1 :(得分:4)
在IE中通过XPath建议CSS选择器的最大原因是性能。 IE不像Firefox和Chrome那样提供本机XPath-over-HTML选项。但是,它确实提供了一个本机CSS选择器引擎,它将始终比IE驱动程序中使用的仅JavaScript的XPath引擎实现更快。而且性能比较甚至都不是很接近。我已经看到它对于XPath定位器的测量速度比CSS选择器慢了一个数量级(虽然我目前找不到引用)。在9之前的IE版本中尤其如此,其中IE JavaScript引擎比32位IE9中引入的Chakra JavaScript引擎慢得多。
答案 2 :(得分:1)
使用CSS定位器是最佳选择,不仅适用于IE,也适用于FF和Chrome。 此外,xpath始终是最糟糕的选择,因为它需要解析整个页面以找到一个简单的元素,所以如果你想在测试中获得性能而你可以避免它,那就去做吧。
此外,如果您使用的是pageObjects,我强烈建议您使用cacheLookup,因此该元素只能找到一次:
@CacheLookup
@FindBy(id="doLogin")
private WebElement loginButton;
就个人而言,我会做以下事情:
答案 3 :(得分:1)
除了速度之外,我发现css通常更短更清洁,更容易阅读。例如:
的xpath:
//ol[@class='choice-group'//li//label//input
VS
的CSS:
css=ol.choices-group li label input