2012-10-06 93 views
3

我一直在使用Ruby 1.8.7中的Selenium WebDriver。大多数项目可以很容易地找到brwsr.find_element(:link, 'Click Here'),但并不是所有的东西都可以用这种方式访问​​(至少不能用我知道的一组链接,:标签名等)。Ruby/Selenium WebDriver XPath优点和缺点

因此,浪费了几个小时试图找到一个元素与上述策略我偶然发现了一些示例xpaths。之前我从来没有打扰过它,因为我看过很多帖子(大部分是StackOverflow),这些帖子对xpath都是消极的。

我在Pros and Cons上发现了一个Google Groups帖子,唯一的Con真的是它在IE中速度较慢。由于我现在在Linux环境(以及Firefox和Chrome)中完成所有工作,所以我不在乎它在IE中速度较慢。

我一直在使用xpath大约2周,我的测试脚本的开发时间可能只有它的一半。使用xpath和find_element似乎总是会抓取正确的元素,因为我曾经在上面描述的非xpath方法中遇到了一些问题。

鉴于'我真的想避免使用xpath,如果我可以'评论我已经看到的数量,我想知道我错过了什么。还是xpath就像正则表达式,懂得它的人都喜欢,所有那些从来没有打扰过的人都会被它迷惑?

回答

3

XPath本质上可能很慢,但这并不能完全避免。

该问题一般倾向于性能和IE。 IE的所有版本都在XPath上吸引。好事?你已经确定IE不是你自动测试的核心部分,因此你可以删除这个con。

至于性能,那么当您使用复杂的XPath查询时,我倾向于只注意到性能下降。基本类型的搜索速度与ID等搜索速度一样快,但当您计算时,它可能会更慢,我没有看到太多明显的差异。

如果需要,我倾向于使用XPath。如果你有一个复杂的HTML结构,我不明白你为什么不使用XPath。它将运行测试。如果速度很慢,请在看完之后,但只有在您获得一个很好的绿色标记以表明测试已通过后。

对于XPath查询,Firefox和Chrome浏览器可能会很好。

XPath查询的另一个坏处是,如果使用非常特定的位置,您可能会陷入混乱。例如借此XPath查找在复杂的表字“测试”:

//div[1]/table[1]/tr[3]/td[1]/div[1]/a[text()='test'][1] 

如果你额外的表行中添加上述第三个?测试将失败。

然而,可以缩短到,它不依赖于底层结构的位置:

//table/descendant::a[text()='text'] 

只要你知道XPath查询后到前,并能优化他们,我没有看到为什么不使用它们。

+0

感谢您的意见。最终,在测试运行过程中失去几秒钟的时间,除了试图找到一贯有效的不同方法以外,还可以节省数小时的时间。我一直只使用缩短版本的xpath,并忘记了更长的版本 - 显式版本的xpath。我目前正在使用作为选择的div,即使我的缩短版本也无法正确找到它。所以我在这里完整地显示xpath。再次感谢。 –