Selenium-八大元素定位

定位策略

在DOM中标识一个或多个特定元素的方法.

定位器是在页面上标识元素的一种方法。它是传送给 查找元素 方法的参数。

查看 鼓励测试练习 寻找 定位器的小技巧, 包含在查找方法中,不同时间,不同原因下,单独声明的定位器的使用方法。

元素选择策略

在 WebDriver 中有 8 种不同的内置元素定位策略:

定位器 Locator描述
class name 定位class属性与搜索值匹配的元素(不允许使用复合类名)
css selector 定位 CSS 选择器匹配的元素
id 定位 id 属性与搜索值匹配的元素
name 定位 name 属性与搜索值匹配的元素
link text 定位link text可视文本与搜索值完全匹配的锚元素
partial link text 定位link text可视文本部分与搜索值部分匹配的锚点元素。如果匹配多个元素,则只选择第一个元素。
tag name 定位标签名称与搜索值匹配的元素
xpath 定位与 XPath 表达式匹配的元素

创建定位器

要使用 Selenium 处理 Web 元素,我们需要首先在网页上找到它。 Selenium 为我们提供了上述方法,使用这些方法可以在 页。为了理解和创建定位器,我们将使用以下 HTML 代码段。

复制代码
 1 <html>
 2 <body>
 3 <style>
 4 .information {
 5   background-color: white;
 6   color: black;
 7   padding: 10px;
 8 }
 9 </style>
10 <h2>Contact Selenium</h2>
11 
12 <form action="/action_page.php">
13   <input type="radio" name="gender" value="m" />Male &nbsp;
14   <input type="radio" name="gender" value="f" />Female <br>
15   <br>
16   <label for="fname">First name:</label><br>
17   <input class="information" type="text" id="fname" name="fname" value="Jane"><br><br>
18   <label for="lname">Last name:</label><br>
19   <input class="information" type="text" id="lname" name="lname" value="Doe"><br><br>
20   <label for="newsletter">Newsletter:</label>
21   <input type="checkbox" name="newsletter" value="1" /><br><br>
22   <input type="submit" value="Submit">
23 </form> 
24 
25 <p>To know more about Selenium, visit the official page 
26 <a href ="www.selenium.dev">Selenium Official Page</a> 
27 </p>
28 
29 </body>
30 </html>
复制代码

class name

HTML 页面 Web 元素可以具有属性类。我们可以在 上面显示了 HTML 代码段。我们可以使用类名定位器来识别这些元素 在 Selenium 中可用。

1     driver = webdriver.Chrome()
2     driver.find_element(By.CLASS_NAME, "information")
3   

css选择器

CSS 是用于设置 HTML 页面样式的语言。我们可以使用css选择器定位器策略 以标识页面上的元素。如果元素具有 id,则创建定位器 因为 css = #id。否则,我们遵循的格式是 css =[attribute=value] 。 让我们看上面 HTML 片段中的一个示例。我们将为名字创建定位器 text框,使用 css。

1     driver = webdriver.Chrome()
2     driver.find_element(By.CSS_SELECTOR, "#fname")

id

我们可以使用网页中 element 提供的 ID 属性来定位它。 通常,对于网页上的元素,ID 属性应该是唯一的。 我们将使用它来识别姓氏字段。

1     driver = webdriver.Chrome()
2     driver.find_element(By.ID, "lname")

name

我们可以使用网页中 element 提供的 NAME 属性来定位它。 通常,NAME 属性对于网页上的元素应该是唯一的。 我们将使用它来识别时事通讯复选框。

1     driver = webdriver.Chrome()
2     driver.find_element(By.NAME, "newsletter")

link text(链接文本)

如果我们要定位的元素是链接,则可以使用链接文本定位器 在网页上识别它。链接文本是链接显示的文本。 在共享的 HTML 代码段中,我们有一个可用的链接,让我们看看如何找到它。

1     driver = webdriver.Chrome()
2     driver.find_element(By.LINK_TEXT, "Selenium Official Page")

partial link text(部分链接文本)

如果我们要定位的元素是链接,则可以使用部分链接文本定位器 在网页上识别它。链接文本是链接显示的文本。 我们可以将部分文本作为值传递。 在共享的 HTML 代码段中,我们有一个可用的链接,让我们看看如何找到它。

1     driver = webdriver.Chrome()
2     driver.find_element(By.PARTIAL_LINK_TEXT, "Official Page")

tag name(标签名)

我们可以使用 HTML TAG 本身作为定位器来识别页面上的 Web 元素。 从上面分享的 HTML 片段中,让我们使用其 html 标签“a”来识别链接。

1     driver = webdriver.Chrome()
2     driver.find_element(By.TAG_NAME, "a")

xpath

一个 HTML 文档可以看作是一个 XML 文档,然后我们就可以使用 xpath 了 这将是到达感兴趣元素以定位元素所经过的路径。 XPath 可以是绝对 xpath,它是从文档的根目录创建的。 示例 - /html/form/input[1]。这将返回男性单选按钮。 或者 xpath 可能是相对的。示例- //input[@name='fname']。这将返回 名字文本框。让我们使用 xpath 为女性单选按钮创建定位器。

1     driver = webdriver.Chrome()
2     driver.find_element(By.XPATH, "//input[@value='f']")

 

相对定位器

Selenium 4 引入了相对定位器(以前 称为友好定位器)。当不容易构建定位器时,这些定位器很有帮助 所需的元素,但很容易在空间上描述该元素相对于具有 一个易于构建的定位器。

运作方式

Selenium 使用 JavaScript 函数 getBoundingClientRect() 来确定页面上元素的大小和位置,并可以使用此信息来定位相邻元素。
查找相对元素。

相对定位器方法可以将先前定位的元素引用作为原点的参数, 或其他定位器。在这些示例中,我们将仅使用定位器,但您可以在最终方法中将定位器换成 一个元素对象,它将以相同的方式工作。

让我们考虑以下示例来理解相对定位器。

 

可用的相对定位器

Above

如果电子邮件文本字段元素由于某种原因不容易识别,但密码文本字段元素是, 我们可以使用文本字段元素是密码元素“上方”的“输入”元素这一事实来定位它。

1 email_locator = locate_with(By.TAG_NAME, "input").above({By.ID: "password"})

Below

如果密码文本字段元素由于某种原因不容易识别,但电子邮件文本字段元素是, 我们可以使用文本字段元素是电子邮件元素“下方”的“输入”元素这一事实来定位它。

1 password_locator = locate_with(By.TAG_NAME, "input").below({By.ID: "email"})

Left of

如果取消按钮由于某种原因不容易识别,但提交按钮元素是, 我们可以使用它是提交元素“左侧”的“按钮”元素这一事实来定位取消按钮元素。

1 cancel_locator = locate_with(By.TAG_NAME, "button").to_left_of({By.ID: "submit"})

Right of

如果由于某种原因不容易识别提交按钮,但取消按钮元素是, 我们可以使用它是 cancel 元素“右侧”的“button”元素这一事实来定位 submit 按钮元素。

1 submit_locator = locate_with(By.TAG_NAME, "button").to_right_of({By.ID: "cancel"})

Near

如果相对定位不明显,或者因窗口大小而异,可以使用near方法 识别最多远离所提供定位器的元素。 一个很好的用例是使用没有易于构造的定位器的表单元素, 但其关联的输入标签元素确实如此。50px

1 email_locator = locate_with(By.TAG_NAME, "input").near({By.ID: "lbl-email"})

Chaining relative locators

如果需要,您还可以链接定位器。有时,元素最容易被识别为在一个元素的上方/下方和另一个元素的右侧/左侧。

1 submit_locator = locate_with(By.TAG_NAME, "button").below({By.ID: "email"}).to_right_of({By.ID: "cancel"})

 

posted @   YF-GX  阅读(47)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css
点击右上角即可分享
微信分享提示