编写Web元素的定位器就像奠定了自动化测试框架的基础。该基础必须足够强大以保持框架的不断增长。否则,结果将是一个片状且不可靠的系统,即使是Document Object Model(dom)结构的最小变化也会失败。
尽管Selenium中有许多定位器,但在XPath和CSS选择器之间进行选择时,有很多争论。在整个职业生涯中,我都从事了许多质量工程师的工作,而且我还看到了这支XPATH与CSS选择者的讨论。但是,没有明显的赢家。
我认为,通过ID找到元素是最可靠,最有效的方法。但是,我看到了许多项目,其中HTML元素中使用ID属性的使用很少。因此,需要探索XPATH和CSS选择器等其他选项以编写定位器表达式。
在XPATH vs vs vs CSS选择器的此博客中,我将广泛讨论使用XPATH和CSS选择器时要遵循的最佳实践,但也将使用Selenium Java进行简要解释其他定位器。
。使用lambdatest云立即在50+浏览器和OS组合上运行剧作家测试脚本。阅读有关 playwright browser testing 的更多信息。
什么是硒的定位器?
在测试网站前端的功能方面时,您需要在网页上执行许多操作。这些操作可以单击按钮,检查复选框或将文本输入文本框。您可以通过在HTML DOM中找到Web元素来使用Selenium WebDriver自动化这些操作。
顾名思义,locator in Selenium可让您找到相应的网络元素。它可以定义为在网页上唯一标识元素的地址。元素找到位置后,您可以使用其他支持方法对元素进行特定操作,例如单击或输入文本。
注意: 编写此XPATH vs vs css selectors博客时,硒版本为硒4.8.0。但是,使用定位器的方式是测试自动化框架的不可知论(例如,硒,柏树等)用于测试自动化。
硒中的不同定位器
硒支持八种定位器,包括XPATH和CSS选择器。我将详细解释每个定位器以及示例。在这里,我将使用LambdaTest Selenium Playground作为AUT(正在测试的应用程序)。
lambdatest是一个基于云的数字体验测试平台,该平台支持手册和automated testing用于网络和移动设备。它提供了3000多个真正浏览器和操作系统的在线Selenium Grid,并在当地网格上进行自动化测试时消除了您面临的麻烦。
订阅LambdaTest YouTube Channel并获取围绕automation testing,硒测试,Playwright,Appium等的最新教程。
在推动野生动物园之前调试网站至关重要。在本文中,我们研究了如何使用 dev tools for Safari 。
调试网站。当Xpath VS VS CSS选择器上的此博客专门关注XPATH和CSS选择器定位器时,我已故意从此列表中省略了它们。它们将在XPath vs vs vs css选择器上的博客的后面部分中彻底介绍。
要直接跳到XPath和CSS选择器上的部分,请单击here。
ID定位器
ID locator用于根据其ID属性找到元素。当元素具有可用的ID时,它是最理想的定位器,因为ID对于所有元素都是唯一的。该定位器直接找到具有简单的非复合定位器表达式的元素。
示例:
在此XPATH vs vs CSS选择器博客中,您可以看到我们正在尝试找到突出显示的文本框。我们可以通过在浏览器控制台中检查此元素并检查该元素具有的属性。
这是一个输入元素,我们可以看到它具有 id 属性,带有value =âem>user-message 。在这种情况下,我们可以将简单的定位器表达式与驱动程序对象引用为:
名称定位器
Name locator用于根据其 name 属性找到该元素。虽然可以使用元素s name 属性创建基本的定位器表达式,但该元素也可能根本没有名称属性。
在此XPATH vs vs vs css选择器博客的上面示例中,文本框的值 name 属性为âem>password 。因此,定位器表达式可以写为:
ClassName定位器
className locator用于根据其 class 属性找到该元素。它也类似于上面讨论的 id 和名称。
在此XPATH vs vs css selectors博客的上面示例中,复选框元素可以使用 class 属性位于:
在推动野生动物园之前调试网站至关重要。在本文中,我们研究了如何使用 dev tools in Safari 。
tagName locator用于使用其标签名称直接查找元素。但是,这不是识别元素的首选定位器,因为它倾向于返回重复结果,因为HTML页面结构上可能有多个特定类型的元素。例如,输入,按钮,div 等。 在此XPATH vs vs css selectors博客的上面示例中,可以使用tagName属性找到 input 类型元素。定位器表达式可以写为: 如上所述,此表达式将标识网页上可用的所有输入元素。 linkText locator用于根据超链接文本找到锚元。您不需要使用锚标签的任何属性。该元素可以使用超链接的可见文本轻松定位。 在此XPATH vs vs CSS选择器博客的上面示例中,LambdaTest网站的第一个菜单链接可以通过可见的链接文本â platform
标签名定位器
linkText定位器
partinlinkText定位器
partialLinkText locator还用于根据锚链的文本找到锚元。它与linkText不同,因为它可以匹配超链接的部分文本。
检查Web元素,以帮助开发人员和测试人员调试UI缺陷或在HTML或CSS文件中进行修改。学习 how to inspect on MacBook 。
在此XPATH vs vs CSS选择器博客的上面示例中,超链接文本为 cross浏览器测试。我们可以使用超链接的部分文本来定位此锚元素:
什么是XPath?
XPath(XML路径)是一种语法表达语言,用于在网页上查找元素。 XPath可用于查找XML和HTML文档中的元素。
Xpath与流行的automation testing frameworks(如Selenium,Cypress,Playwright等)广泛使用。
语法:
XPATH表达式可以穿过XML/HTML DOM结构的第一个节点到所需的元素。 XPath表达式的标准语法包含具有属性和属性值的元素标签名称和属性的元素标签。
xpath表达式看起来像这样:
这是XPath表达式的图形表示。
XPath的类型
有两种类型的xpath
-
绝对xpath
-
相对xpath
绝对XPATH
绝对XPATH用于通过从HTML页面的启动节点(< html >
tag)到要位于页面上的元素开始遍历整个DOM结构来找到元素。绝对XPath的主要特征是它以一个前向斜杠(/).
检查Web元素,以帮助开发人员和测试人员调试UI缺陷或在HTML或CSS文件中进行修改。学习 how to inspect element on MacBook 。
如下所示是 name 文本框的绝对xpath的一个示例,如下图所示:
绝对xpath不是定位元素的首选方法,因为它的脆弱,如果DOM结构发生任何变化,则趋于破裂。
让我们在这里看到一个演示,以证明绝对XPath表达的脆弱性。在此XPATH vs vs CSS选择器博客的上面示例中,已编辑了DOM结构。
现在,相同的绝对xpath表达式无法定位该元素,因为删除了启动节点和元素之间的一个 div 元素。
相对XPATH
相对XPath不需要起始节点,并且可以从DOM结构的中间定位元素。它始于双向前斜线(//),是定位元素的首选XPath表达式,因为表达式短且稳健。
在这里,找到 name 文本框的相对XPath将是:
您在此XPATH vs vs css selectors博客的上面示例中看到的那样,即使删除了启动节点和元素之间的几个节点,相对Xpath表达式仍在定位元素。
需要在Safari上进行交叉浏览器测试的绝佳解决方案吗?忘记模拟器或模拟器 - 使用真实的在线浏览器。尝试lambdatest在 safari browser online.
上测试写XPath表达式
在从事大型的Web项目工作时,可能会有一些情况使用基本的XPATH表达式找到元素并不理想。之所以如此,是因为该元素可能没有任何可以唯一识别的属性。
另外,在某些情况下,元素唯一属性的值随着页面刷新而不断变化。然后问题是:您将如何找到它?
好吧,XPath提供了定位这种动态元素的方法形式的灵活性。让我们深入研究。
xpath包含()方法
contains()方法可以在xpath表达式中使用,以找到一个属性值随着页面刷新而不断变化的元素。
此方法基于查找部分文本的原理。如果您知道动态属性值的某些部分保持恒定,那将很有用。当属性值冗长并包含多个单词(例如,占位符文本值)时,也可以使用它。
。示例:
在此示例中,使用 button 类型元素使用 class 属性。但是为此按钮定义了多个类。因此,它不能使用 className 定位器直接定位。
要使用 class 属性找到此元素,我使用了 contains()方法,xpath表达式看起来像这样:
xpath starting-with()方法
starting-with()方法也适用于查找部分文本的相同原理。它与contains()方法不同,因为它倾向于在属性值的开头找到静态文本。
我也使用了按钮元素的相同示例来演示此方法。要使用类属性找到此元素,我在此XPath vs vs vs css selectors博客中使用了starter-with()方法,xpath表达式看起来像这样:
您可以在此XPath vs vs css selectors博客的上面示例中看到,类属性值以类名称为MT-20开始。因此,此表达式能够成功地定位此元素。
此博客讨论了2021年的13个最佳功能 automation testing frameworks 。
xpath text()方法
text()方法用于根据其文本值定位元素。此方法的工作原理与 linkText 定位器相似。但是,此方法在具有文本值之类的任何元素上都起作用,例如< span >
,< p >
,< button >
或< div >
,而linkText仅适用于< a >
元素。
在此XPATH vs vs css selectors博客的上面示例中, button 元素是在 text()方法的帮助下使用其文本定位的。这种情况的简单XPath表达式可以写为:
X Path逻辑运算符
使用逻辑定位器(和OR)时,比较了元素的多个属性值。使用或运算符,如果任何比较的值为true,将找到该元素。使用和运算符,要找到元素的两个值都需要真实。
在此示例中,我使用 id 和 class button element 运算符。如您所见,ID可以唯一识别,但是定义了多个类。
因此, contains()方法是 class 属性需要在这种情况下写下以下正确的表达式:
使用我们的 automation testing tutorial 改进软件测试过程。发现自动化测试的好处,了解最佳工具和技术,并获得优化测试策略的专家见解。
同样,可以使用或运算符以及这样的表达式编写:
请注意,两个逻辑运算符都对病例敏感,需要在表达式中的小写字母中指定。
XPath轴方法
类似于此XPATH vs vs vs css选择器博客上面部分中解释的方法,XPATH提供了定位动态元素的其他方法。这些方法称为轴方法。 XPATH轴方法可以在DOM双向上穿越DOM,并且在找到没有任何属性的元素时非常有用。
有许多轴方法,但是我们将在这里讨论最常见的方法。
-
遵循
-
-
祖先
-
父母
-
儿童
下列的
它在当前节点的关闭标签后选择DOM中的所有元素。
以下方法的语法为 plost :: tag name
可以在下面的示例的帮助下更好地解释。
在这里,以下关键字找到所有 input 元素,这些元素是在 name 之后,密码,公司,和网站”文本框。此示例的XPath表达式是:
如上所述,此表达式定位当前节点后出现的所有元素。如果要在此示例中找到第一个输入元素,则可以使用这样的索引:
同样,您可以使用所需元素的任何属性,以避免使用索引作为最佳实践。在这里,我使用第二个 input element的 id 属性展示了另一个XPath表达式,即 email email emage emble 。
前
它选择了DOM中的所有元素,该元素是在当前节点的开头标签之前出现的。
上述方法的语法是 tag name
可以在下面的示例的帮助下更好地解释。
在这里,之前的关键字找到了所有输入元素,该元素是在公司文本框之前的,例如。 name , email password 。此示例的XPath表达式是:
就像上面的示例一样,如果要从找到的所有元素中找到特定元素,则可以使用索引或任何属性值。
祖先
它选择当前节点的所有祖先元素(父,祖父母等)。
祖先方法的语法是祖先::标签名称
可以在下面的示例的帮助下更好地解释。
在这里,祖先关键字找到了所有是当前节点的祖先,即文本框。此示例的XPath表达式是:
再次,此表达式发现了8 em> div 元素,这些元素是当前节点的祖先(即父母,祖父母)。如果要选择特定元素,则可以使用索引或相关属性值。
父母
它选择当前节点的父元素。
父方法的语法为 parent :: tag name
可以在下面的示例的帮助下更好地解释。
在这里, parent 关键字找到当前节点的父元素的parent div 元素,即 company 文本框。此示例的XPath表达式是:
孩子
它选择了当前节点的所有子元素。
儿童方法的语法是 child :: tag name
可以在下面的示例的帮助下更好地解释。
在这里, child 关键字选择所有输入元素,即当前 div 元素的子女。此示例的XPath表达式是:
使用XPath的优点
-
xpath可以在DOM结构的任意级别定位一个元素,并且不需要从根节点的开头到达所需元素
-
x path表达式是双向的,可以从上到下,从底部到顶部(即,从父母到子节点,从子节点到父母节点)
-
XPath与XML和HTML文档一起使用,并由多种编程语言支持
-
xpath表达式支持多种方法,以找到由于动态属性值或有限的属性而难以找到的元素。例如,如果您需要找到一个没有任何唯一属性的元素,则可以使用XPath轴方法来建立与另一个唯一元素的亲子关系。通过这种方式,所需的元素可以很容易地找到。
发现17键 benefits of automation testing ,这将帮助您确定这是否是适合您的SDLC的正确呼吁。了解更多。
使用XPath的缺点
-
xpath表达式可能会变得难以写或理解,以定位具有动态属性值的元素。
-
XPath如果页面结构发生变化,则往往会破裂。尽管使用相对XPath基本上解决了此问题,但仍然有可能导致XPath失败的页面结构变化。
-
xpath不支持具有多值属性的元素。
什么是CSS选择器?
CSS (Cascading Style Sheets) Selector是一种定位器,使用字符序列模式来识别基于HTML结构的元素。
对于初学者,CSS选择器的语法似乎比其他定位器(例如ID,名称,className等)更为复杂。但是,它是具有动态属性值的元素。<<<<<<<< /p>
语法:
如上所述,CSS选择器语法与XPath的语法非常相似。可以表示如下:
这是CSS语法的图形表示:
编写CSS选择器表达式
A CSS选择器表达式可以用元素的多个属性编写。编写CSS选择器表达式的最常见方法是:
-
css选择器带有 id 属性
-
css选择器带有 class 属性
-
css选择器带有其他属性
-
CSS选择器通过组合不同的属性
具有ID的CSS选择器
元素的ID属性可用于编写CSS选择器表达式。我将再次以LambdaTest Selenium Playground网站的示例以使用其ID属性找到一个元素。
在这里,您可以看到输入元素的ID属性值为用户 - 邮件 。因此,根据语法的结果CSS选择器表达式将是:
可以通过使用iD属性的快捷方式来进一步简化此表达式,并且该字符为#。因此,在这里,简化的CSS选择器表达式将是:
在这里,我刚写了元素标签名称,后跟#字符和ID属性的值。
本文将引导您完成最佳 Automation testing certifications ,这将有助于提高您作为测试自动化工程师的职业。 强>
CSS选择器与课程
像ID属性一样,类属性也可以用于编写CSS选择器表达式。
示例:
在这里,复选框的类属性值为 mr-10 。因此,CSS选择器表达式将是:
再次,像ID属性一样,类属性也具有一个快捷字符,可用于编写简化的CSS选择器表达式。在这里,我们可以使用点(。)字符,结果表达式将成为:
具有其他属性的CSS选择器
就像上述具有ID和类属性的示例一样,可以使用元素的任何属性编写CSS选择器表达式。正如您一定已经注意到的,“无线电”按钮元素具有多个属性。
现在,我将使用其他属性编写定位器表达式:
在这里,我们可以使用 value 属性,根据CSS选择器语法,该表达式将为:
请注意,快捷方式字符仅适用于ID和类属性,而不适用于Web元素的所有属性。
从这12个最佳 mobile automation testing tools 中提升了应用程序测试过程。我们的综合列表包括实现卓越的最佳工具。在这里了解更多。
CSS选择器通过将ID与不同属性结合在一起
在某些情况下,您需要通过组合元素的不同属性来编写定位器表达式以唯一识别元素。
在这里,可以通过将 id 属性与元素的 type 属性相结合来定位。由此产生的表达方式为:
演练:
表达式从标签名称开始inputâ。然后将#â字符用于ID属性,后面是其值。并且附加属性typeâ放置在方括号内,其值 。
。CSS选择器通过将类与不同属性相结合
类似于上面共享的示例,可以通过将类属性与元素的其他属性相结合来编写CSS选择器表达式。
因此,在同一示例中,结合类和值属性的结果表达式可以写为:
示例:
演练:
表达式从标签名称开始inputâ。然后,。并将其值放置在其值 。
A CSS选择器表达式可以通过结合元素的任意数量的任何属性来编写。 CSS选择器是查找具有动态属性值的元素 A CSS选择器表达式比等效XPath表达式 a CSS选择器表达式看起来可能有些复杂,但是与XPATH表达式相比,它可以易于理解,因为它可以简化而简短。
使用CSS选择器的优点
使用CSS选择器的缺点
-
CSS选择器仅提供单向流,即从父元素到子元素。使用CSS选择器表达式从子到父元素是不可能的。
-
css选择器没有通过与其属性值的部分文本相匹配来定位元素的方法。
XPath vs CSS选择器哪一个更快?
如果我们谈论性能,则观察到CSS选择器表达式在性能方面要好得多。现在出现问题了,为什么XPath比CSS选择器慢?
好吧,这个问题没有明确的答案,但是广义的推理可能是xpath表达式比CSS选择器提供了更多的选择。这是一种复杂的表达语言,比CSS选择器更难优化。
我认为,您的项目中可能会有XPath可以证明非常可靠和快速的情况。在其他情况下,CSS选择器将更快。
在搜索这个问题的答案时,我在一些论坛上遇到了一些有趣的讨论,我想在XPATH vs vs vs vs css selectors上与您分享其中的一些。
在这里阅读完整的讨论。
在这里阅读完整的讨论。
奖励提示:如何写最好的定位器表达式?
在对所有定位者进行了详细讨论之后,很明显,每个定位者都具有重要意义。但是,为了充分利用Xpath和CSS选择器的功能,正确利用它们至关重要。以下是一些有用的提示,您可以参考编写可靠且可靠的定位器表达式。
本文介绍了最佳 UI Automation Testing 工具涵盖了UI自动测试是什么,执行UI测试时挑战以及可以帮助您的顶级工具执行UI测试。
避免绝对定位器表达式
因为它们是最脆弱和不可靠的。一旦对目标节点的启动节点内的DOM结构进行任何更改,它们就会立即破裂。
绝对XPath表达式的示例:
绝对CSS选择器表达式的示例:
使用相对定位器表达式
,即使您的目标节点没有变化,即使对DOM结构进行任何更改,它们也是可靠的。
相对XPath表达式的示例:
相对CSS选择器表达式的示例:
始终尝试使定位者表达尽可能短
使用唯一的属性值。
-
避免使用未来可能会改变的属性编写定位器表达式。例如,具有值的按钮的a label 属性可能会在将来更改为“提交”。
-
避免编写基于索引的定位器,以从多个类似元素中选择一个元素。
例如,考虑以下HTML片段:
如果要找到第一个按钮,则将定位器编写为 //菜单/按钮[1] 可能不是一个好主意。之所以如此,是因为如果将来将按钮的位置切换,则该定位器表达式将产生不良的结果。
在这种情况下,理想的定位器表达式将是 //菜单/按钮[text()='选项1â] ,它基于按钮值而不是其索引。
用于生成定位器表达式的最佳浏览器扩展程序
根据我的经验,我试图以最详细的方式解释XPath和CSS选择器,以便您可以为您在职业道路上可能遇到的最顽固的元素编写定位器表达式。
然而,当您在大规模项目中工作时,手动编写数百个元素的定位器表达式变得很耗时。为了应对这一挑战,有许多浏览器扩展名可以自动创建定位器表达式。
SelectorShub
SelectorsHub是一种镀铬浏览器扩展名,可用于快速生成XPATH和CSS选择器表达式。它还列出了该元素的所有可用属性,并消除了挖掘RAW HTML的必要性。您还可以右键单击该元素,并在不打开浏览器控制台的情况下快速复制XPATH或CSS选择器。
在此示例中,您可以看到它列出了复选框的所有属性和定位器表达式 input element。
Chropath
Chropath是另一个有用的Chrome浏览器扩展程序,您可以自动生成定位器表达式。它还自动列出了元素的所有属性以及XPATH和CSS选择器表达式。
在此示例中,您可以看到它还列出了同一复选框的所有属性和定位器表达式 input element。
POM建造者
POM构建器也是一个镀铬浏览器扩展程序,它以相同的原理为右键单击所需元素,以直接复制XPATH或CSS选择器定位器。
。它还根据其复杂性和鲁棒性建议您最好的定位器。
在此示例中,您可以看到它列出了无线电输入元素的所有属性和定位器表达式。它还显示了顶部的推荐定位器。
XPath vs CSS选择器:结论
所以我们在XPath vs vs vs CSS选择器的博客结束时,寻求答案的答案最广泛地询问了测试自动化社区的问题。要使用哪个:XPATH或CSS选择器?
好吧,老实说,这个问题不能做出决定性的答案,因为两者都是能够编写丰富,健壮且复杂的定位者表达方式来找到最具挑战性和最具动态元素的最强大定位者。我的倾向是对CSS选择器,因为与XPATH相比,我认为它的表达方式略有。我也喜欢使用快捷方式字符编写CSS选择器表达式的易度性。
我也感谢Xpath在两个方向及其广泛选择轴方法的能力。因此,这不仅仅是一个偏好,它成为两者之间选择的决定因素。现在,我将结束此博客的最终注释,在此期间,我敦促您体验这些令人惊叹的定位者的力量,并选择最适合您要求的定位者。
良好再见并继续进行测试!