在基于网络的应用程序的开发过程中,有太多的测试案例需要执行。对于每个测试工程师来说,在HTML元素上执行诸如类型、点击等动作是必须的。 在执行自动化测试时,测试自动化工具应该能够在HTML元素上执行这些操作,就像我们在手动测试时的互动一样。
但是,自动化工具如何知道如何定位一个HTML元素来执行所需的操作?这就是Selenium定位器小抄派上用场的地方。
让我们在这个Selenium定位器教程中探索Selenium的定位器类型。
和我们一起深入了解我们专门为你制作的Selenium定位器小抄。
什么是Selenium定位器?
Selenium是一个广泛使用的测试自动化框架。通过Selenium,你可以自动进行任何互动,如输入、点击、双击DOM WebElements等。为了识别网页上的任何HTML元素,你必须使用定位器。这几乎是所有UI自动化工具的共同功能,包括Selenium。
Selenium WebDriver定位器采用不同的方法来识别页面上的HTML元素。Selenium对主要的网络定位器提供了多种支持。挑选一个符合你的测试要求的。我们准备了这份Selenium定位器小抄,关注我们需要涵盖的内容,以简化你的工作。
这些是Selenium中的定位器类型--ID、Name、ClassName、LinkText、Partial LinkText、TagName、CssSelector和XPath。
在这个Selenium定位器小抄的下一节,我们将详细探讨Selenium中的不同定位器。
什么是Selenium定位器类型?
在这份Selenium定位器小抄中,让我们在Selenium定位器小抄的这一部分中了解Selenium中最重要的定位器类型。
以下是该列表。
| 定位器 | 说明 | 语法(在Java中) |
|---|---|---|
| ID | 计算出使用ID属性的WebElement | driver.findElement(By.id("IdValue"))。 |
| 名称 | 找出使用Name属性的WebElement | driver.findElement(By.name("nameValue"))。 |
| 类名 | 利用Class属性来识别该对象 | driver.findElement(By.className("classValue"))。 |
| 链接文本 | 充分利用文本超链接来定位WebElement | driver.findElement(By.linkText("textofLink"))。 |
| 部分链接文本 | 利用超链接中的部分文本来定位所需的WebElement位置 | driver.findElement(By.partialLinkText("PartialTextofLink"))。 |
| 标签名 | 利用TagName来定位任何需要的WebElement | driver.findElement(By.tagName("htmlTag"))。 |
| CssSelector | 我们用来在网页中创建不同风格规则的CSS可以用来定位任何需要的WebElement | driver.findElement(By.cssSelector("cssValue"))。 |
| XPath | 引入XPath作为WebElement的定位器 | driver.findElement(By.xpath("xpathValue"))。 |
用 "ID "属性定位网络元素
这是我们在Selenium定位器小抄中要讨论的第一个部分。Selenium中的ID定位器是定位不同网页元素的最常用方法。W3C希望它始终是唯一的。随着动态网页的出现,你可以动态地生成 "ID"。
下面是通过 "ID "来定位网页元素的语法。
driver.findElement(By.id(“IdValue”));
- 驱动程序。Selenium WebDriver,在使用Selenium定位器时,我们需要从它那里定位网页元素。
- findElement。用来查找网页元素的属性。
- By.id。用来传递 "IdValue "属性的方法。
- IdValue。用它的Id名称定位网页元素。
例子。
<input name="food" required="" type="radio" id="food-radio-1" class="custom-control-input" value="Menu">
driver.findElement(By.id("food-radio-1"))。
By.id(“food-radio-1”):找到ID为 "food-radio-1"的网络元素。
今天就注册,在3000多种浏览器、操作系统和设备上测试网站和网络应用。现在就试试LambdaTest吧!
用 "名称 "属性定位网络元素
Selenium允许我们使用Selenium中的Name定位器来识别任何使用 "name "属性的元素。它可以有许多具有类似 "name "属性的元素。当我们想识别网络元素时,我们应该尽量使其独一无二。否则,它就会识别同一页面上存在的一些具有相同名称值的元素,并选择它首先发现的元素。
下面是通过 "名称 "来定位网页元素的语法。
driver.findElement(By.name(“nameValue”));
- By.name: 用来传递 "名称 "属性的方法。
- nameValue。要定位的名称的值。
例子。
<input name="food" required="" type="radio" id="food-radio-1" class="custom-control-input" value="Menu">
driver.findElement(By.name("food"));
By.name("food") 。定位名称为 "食物 "的网络元素
在你阅读了我们的Selenium定位器小抄后,请观看我们的最新教程,了解如何与Selenium WebDriver的网络元素互动。
用 "ClassName "属性定位Web元素
Selenium中的ClassName定位器可以帮助Selenium定位DOM类值。为了执行或识别涉及 "className "属性的任何形式的网络元素操作,我们使用class。
下面是通过 "ClassName "来定位网页元素的语法。
driver.findElement(By.className(“classValue”));
- By.className。用来传递 "className "定位器的方法。
- classValue。用具体的类名来定位类。
例子。
比方说,下面的片段由一个事件的整个表单组成。
<div class="registration-form-wrapper">
类属性值可用于表单识别。为了在我们的网页上识别同样的东西,下面的语法可以派上用场。
driver.findElement(By.className("registration-form-wrapper"));
By.className("registration-form-wrapper"):找到类名为 "registration-form-wrapper" 的网页元素
我们需要使用一个独特的类名来定位网页元素。如果有其他东西由这个类名组成,Selenium会考虑它而不是你需要考虑的web元素。
用 "partialLinkText "和 "LinkText "属性定位网络元素
Selenium中的partialLinkText和LinkText定位器具有相同的功能。它们让你用超链接文本定位不同的网络元素。我们可以用它们来处理带有锚点 *< a>*标签的元素。参考不同的Selenium定位器策略,当我们在网页上有各种带有确切文本的超链接时,Selenium会去选择最先出现的那个。
下面是定位带有 "partialLinkText "和 "LinkText "属性的网络元素的语法。
driver.findElement(By.partialLinkText(“PartialTextofLink”));
- By.partialLinkText- 部分链接文本定位器让你通过使用部分链接文本来识别元素。
driver.findElement(By.LinkText(“LinkText”));
- By.LinkText- 只通过链接文本来识别元素。
例子。
比方说,锚点元素由以下的属性和特性组成。
<a id="Link1" href="https://www.lambdatest.com" target="_blank">Landingpage</a>
要用partialLinkText或LinkText识别元素,超链接文本是必须的。
driver.findElement(By.linkText("Landingpage"));
By.linkText("Landingpage"): 用来识别元素的超链接文本。
使用partialLinkText,你可以只使用链接文本的一部分来识别元素。
driver.findElement(By.partialLinkText("Land"));
By.partialLinkText("Land"): Part of the link text “Landingpage”.
用 "TagName "属性定位网络元素
Selenium中的TagName定位器可以使用HTML标签名称,如div、button、***input、anchor标签等来识别网页元素。
以下是查找带有tagName的元素的语法。
driver.findElement(By.tagName(“htmlTag”));
- By.tagName。tagName定位器用于查找具有特定标签名称的网页元素。
- htmlTag。用来识别元素的标签名称。
例子。
By.tagName("a");
("a"): tagName定位器返回包含指定标签 "a "的页面中的所有元素。
用 "CssSelector "属性定位网页元素
层叠样式表(CSS)可以广泛用于不同网页的样式。大多数的网页都是动态设计的。因此,要获得一个名称、类别或唯一的ID来定位不同的元素是相当困难的。Selenium中的CSS选择器可以作为最佳选择,因为与Selenium中不同类型的定位器相比,它们的速度相当快。当你读完我们的Selenium定位器小抄后,你可以通过CSS选择器小抄来进一步深入了解它。
下面是用CssSelector来识别一个网页元素的语法。
driver.findElement(By.cssSelector(“cssValue”));
- By.cssSelector:CssSelector定位器是用来使用CSS选择器寻找元素的。
- cssValue。用来定义CSS选择器的值的属性。
例子。
css=(HTML Page)[Attribute=Value]
让我们考虑一下,输入元素由以下内容组成。
<input autocomplete="off" placeholder="Name" type="text" id="userName" class=" registration-form">
为了用CSS选择器找到该元素,下面是代码。
By.cssSelector("input[id= ‘userName’]");
- By.cssSelector:用于用CSS选择器定位网页元素的方法。
- input[id= 'userName']。CSS选择器的值。
- 输入。用来定义CSS选择器的属性。
- Id。用来输入标签的方法,用于定义各种CSS定位器
- userName。CSS定位器的名称。
让我们来看看我们的Selenium定位器小抄中的各种CSS选择器属性类型。
CSS选择器中的标签和ID
要通过ID和Tag来定位元素,你必须在Selenium定位器中使用以下组件。
语法。
css=(Html tag)(#)(ID attribute value)
- Html标题。获取你要定位的标签(例如,输入标签)。
- #:获取ID属性。我们专门用它来通过ID定位任何元素。
- ID属性值。当你想定位该元素时,输入ID属性值。
这与CSS定位器中的Tag和ID类似,只是你用一个点(.)来表示类属性值,而不是哈希(#)。
语法。
css=(HTML tag)(.)(Class attribute value)
- 类属性值。属性类的值
CSS选择器中的标签和属性
这是Selenium中的一种定位器,你可以通过标签名来定位元素,并通过其值来定义属性。当多个元素具有相同的属性和标签时,Selenium驱动程序会选择第一个。
语法。
css=(HTML Page)[Attribute=Value]
- Attribute=Value。通过提供它的值来定义属性。
CSS选择器中的Tag、Attribute和Class
通过Selenium中这些类型的定位器,你可以通过类名和不同的属性值来定位元素。
语法。
css=(HTML tag>)(. )(Class attribute value)([attribute=Value of attribute])
- HTML标签。用于定义标签名称。
- 类属性值。用来定义类属性的值。
- attribute=属性值。用于提及属性的确切值。
CSS中用于类的通配符(*、^和$)。
Selenium CSS选择器可以帮助你通过不同的模式(如^、*和$)匹配多个字符串。我们使用CSS通配符选择器来同时选择不同的元素。
让我们在Selenium定位器小抄中带你了解如何使用Selenium CSS选择器的通配符。
a.CSS选择器中的 "开始"(Starts-With)
在Selenium的许多类型的定位器中,当你试图用一个以任何指定值开始的字符串来匹配不同的元素时,这个Selenium定位器可以帮助你定位元素。
语法。
css=(HTML tag)([attribute^=value])
- [attribute^=value]。用于选择或定位任何需要的WebElement。
b.CSS选择器中的Ends-With
当你试图用一个以任何指定值结尾的字符串来匹配不同的元素时,这个Selenium定位器可以帮助你定位元素。
语法。
css=(HTML tag)([attribute$=end of the string])
- [attribute$=字符串的结尾]。用于通过CSS选择器根据字符串的结束值定义属性值来定位元素。
c.CSS选择器中的包含
当你想用一个由设定值组成的字符串来匹配不同的元素时,可以定位不同的元素。
语法。
css=(HTML tag)([attribute*=partial string])
- [属性*=部分字符串]。用于通过CSS选择器中的包含,根据字符串的部分值来定义属性值,从而定位该元素。
d.CSS选择器中的子元素
我们使用这个Selenium定位器来定位一个存在于另一个元素中的元素。
语法。
css= tagname.class name li:nth-of-child
- Li:nth-of-child。被引用的子元素的索引
Selenium相对定位器
如果不谈Selenium相对定位器,我们的Selenium定位器小抄就不完整了。Selenium 4的一个主要功能是相对定位器。这有助于你搜索不同的WebElements,你可以将其与不同的元素联系起来。下面是Selenium 4相对定位器的列表。
用 "XPath "属性定位网络元素
让我们在这份Selenium定位器小抄中探讨XPath这个重要的属性。在Selenium中的XPath定位器在寻找网络元素的定位器类型中是独一无二的。XPath利用XML表达式来定位网页元素。它是定位动态网页元素的必备工具,就像CSS选择器一样。当属性是动态的时候,XPath简化了它。
下面是用XPath定位器来识别网页元素的语法。
driver.findElement(By.xpath(“htmlTag”));
- XPath。属于DOM结构的XPath(XML表达式)。
- htmlTag。目标元素的所需属性,用于识别任何独特的网络元素。
例如。
By.xpath("By.id(“userName”));
- By.xpath。XML表达式,用于定位网页的元素。
- id。标签名称
- By.id("userName")。用于识别 "userName "下的网页元素的属性。
有许多类型的XPath定位器。
- 标准XPath。这是标准的方式,你可以通过它来写XPath定位器。
- XPath Contains。XPath使用CSS选择器 "包含 "来定位值动态变化的WebElements。
XPath Contains的语法。
//tagname[contains(@attribute, ‘partial value of attribute’)]
- **XPath使用'AND'和'OR'。**在Selenium的这些类型的定位器中,当我们想根据一组条件来定位一个Web元素时,我们使用'OR'和'AND'操作符作为Selenium XPath选择器的一部分。对于 "和",两个条件都必须是真。
XPath OR操作符的语法。
//input[@id='login_1' OR @name='login’]
XPath AND操作符的语法。
//input[@id='login_1' AND @name='login’]
- XPath中的 starts-with() 方法。XPath Selenium定位器的starts-with()方法提供了与Selenium CSS选择器类似的功能。这可以帮助你定位不同的元素,从一个特定的属性值开始。我们可以使用XPath starts-with()方法来定位WebElements,当我们刷新页面时,这些元素的值会改变。
starts-with()方法的语法。
//tagname[starts-with(@attribute,'starting name of the attribute value')]
- XPath文本。Selenium XPath文本定位器可以帮助我们通过XPath定位WebElements,当它使用一个精确的文本匹配。当我们查看所有包含某一级文本的标签时,我们可以用它来定位元素。
语法。
//div[text()='Logged In']
不同的定位器策略来识别不同的网络元素
在起草我们的Selenium定位器小抄时,我们不能跳过这一部分,因为必须确定哪种策略最适合你。
findBy。提到为任何WebElement或一组WebElements定位对象的策略。它有两种类型:findElement和findElements。
网络应用的交互将需要Selenium驱动来定位页面上的不同网络元素。当它不能正确识别元素时,你就不能触发不同的事件,如输入、发送或点击。这些是寻找一个或多个网络元素的方法。
- findElement。找到一个单一的网页元素,并根据定位器的搜索需求将其返回。
- findElements:找到每一个网络元素,并根据定位器的搜索需求将其返回。
一旦你完成了我们的Selenium定位器小抄,就可以通过我们的XPath定位器小抄来了解Selenium中的XPath基础知识。
使用Selenium定位器的最佳实践
在本节Selenium定位器小抄中,当你想通过Selenium定位器来识别元素时,让我们看看以下几点。
- 选择正确的Selenium定位器来识别Selenium中的网络元素。
- 避免使用动态属性值来定位Selenium定位器中的不同元素。
- 当你的网页包含一个独特的集合时,使用ID和名称属性,而不是XPath,以实现快速的过程。
- 当使用定位器时,确保定位器直接指向需要的元素。
- 避免任何会导致脚本中断的东西,比如使用自动生成的元素,因为我们在动态网页环境中的运行时间会生成元素的属性。
- 当使用CSS或XPath定位器时,避免使用Chrome开发工具生成的定位器。这将导致代码破坏、维护和可靠性问题
- 始终保持你的定位器很短,便于识别。
你可以随时回到我们的Selenium定位器小抄和LambdaTest学习中心中提到的其他关于Selenium的资源材料,以便更好地更新与响应式测试、跨浏览器兼容性等相关的不同主题。
总结
在进行Selenium自动化测试时,Selenium定位器作弊表会很方便。像LambdaTest这样的自动化测试平台提供了一个在线Selenium网格,让你在3000多个真实浏览器和操作系统的浏览器群中执行端到端的自动化测试。
使用这个Selenium定位器小抄,使用正确的定位器和相对定位器快速识别一个网络元素。在Selenium的不同类型的定位器中,你需要选择适合你情况的定位器。
希望你觉得我们的Selenium定位器小抄很有用
常见问题(FAQ)
在Selenium中哪个是最好的定位器?
尽管Selenium中有不同类型的定位器,但许多用户更喜欢用Selenium ID定位器来定位任何页面上需要的WebElements,因为这是最快的方法。Selenium ID定位器对每个DOM元素都是唯一的。
什么是不同类型的网络定位器?
在Selenium中有八种类型的定位器。
- 元素ID
- 文本
- 字段名称
- 链接文本
- 部分链接文本
- CSS类
- CSS选择器
- XPath
findElement和findElements的区别是什么?
正如我们的Selenium locators cheat sheet中提到的,findElements方法将返回每个匹配的元素的列表。当没有元素可用时,它将返回一个空列表,或者它在你的页面上不再存在。另一方面,当你无法在页面上找到该元素时,findElement方法会抛出一个NoSuchElementException异常。
CSS和XPath哪个定位器更快?
与XPath相比,CSS选择器在大多数浏览器中的表现更快、更可靠。它们相当短,当你阅读它们时更容易。
什么是Selenium中的XPath?
XPath是一种方法,Selenium通过HTML页面结构进行导航。它让测试人员通过XML文档结构,你可以在XML和HTML文档上使用它。