也可以使用xpath来标识具有唯一ID /名称的Web元素。那么,与By.xpath相比,使用By.id/By.name有什么优势。考虑以下示例。以下是一个网络元素。
<input id="abc" name="abc" xpath="abc">
此网络元素可以标识为:
By.id("abc");
By.name("abc");
By.xpath(".//*[@id='abc']); or By.xpath(".//*[@name='abc']);
我想知道使用1.或2.而不是3.有什么优势?
答案 0 :(得分:2)
正如Gilles Quenot所述,您不能假定ID属性是唯一的,但是除非我们谈论移动应用程序,否则它应该是并且应该是。在Web应用程序中,ID是理想的搜索方法,因为它应该是唯一的。
name属性通常也是唯一的,但不一定是,通常不是。
使用xpath的一个缺点是元素可以在文档中移动或添加其他项目,并且取决于制作的方式,它可能会破坏xpath。从理论上讲,至少使用ID的定位器“更”容易受到这种破坏的影响,但正如暗示的那样,没有任何保证。
通常,如果没有唯一的ID,我将使用xpath,并尝试编写它,使其具有足够的通用性以抵抗“损坏”。
答案 1 :(得分:1)
我不认为Xpath比ID和Name更受欢迎。
我相信Xpath是比Name和ID属性更好的选择。
答案 2 :(得分:0)
您的问题非常有效,您提到的每个可能的选项都可以使用,但是为什么我们优先选择ID和Name定位符而不是XPath?
代替给出直接答案,让我解释一些其他概念以帮助您理解它。
硒通过 HTML DOM 与Web控件交互的方式和HTML DOM是W3C标准,每个浏览器都遵循该标准,并且它是Java脚本引擎,例如chrome的V8,Edge的Chakra等。
GetElementById()和GetElementsByName()的HTML DOM公开方法,所有浏览器均根据W3C标准支持它们。因此,当您使用Id,Name等定位器时,这些定位器已经实现并且将始终为您服务。
引用https://www.w3schools.com/jsref/dom_obj_document.asp
XPath实际上用于在XML文档中的元素和属性之间导航。由于HTML DOM也是XML的形式,因此Xpath也可以使用,但XPath并非为HTML DOM设计。它还有其他目的。
结论是,当您已经有HTML DOM支持的方法时,应优先使用XPath上的方法,这是一种通用的导航方式,并且Internet Explorer浏览器中的某些XPath实例的行为异常