Skip to content

常见控件定位方法

常见控件定位方法

简介

在 Web 自动化测试中,定位是指在进行测试过程中定位网页上的元素位置,例如按钮、文本框、下拉菜单等,以便进行后续操作。定位是自动化测试中至关重要的步骤,它使测试工具能够准确找到并于页面上的元素进行交互,从而模拟用户的实际行为。通过有效的定位,测试脚本能够对页面元素执行各种操作,验证用户的行为并确保其功能的正确性。

为什么要学习定位

  • 与页面元素交互:在自动化测试中,测试脚本需要与页面上的元素进行交互,如点击按钮、输入文本等。
  • 验证应用程序行为:自动化测试的主要目的之一是验证应用程序的行为是否符合预期,定位方式的准确性直接影响测试脚本对页面元素的操作。
  • 提高测试效率:Web 页面的结构可能会随时更改,例如元素的 ID、Class Name 等可能会变化。掌握不同的定位方式可以在元素属性变化时,灵活地修改测试脚本而不影响稳定性。
  • 提高测试脚本的可维护性:如果只依赖一种定位方式,当页面结构发生变化时,测试脚本可能会失效。多掌握定位方式可以根据情况选择最合适的定位方式,提高脚本的可维护性。

Selenium 八大定位方式

Selenium 提供了八种定位方式:

https://www.selenium.dev/documentation/webdriver/elements/locators/

定位方式 描述
class name class 属性对应的值
css selector(重点) css 表达式
id(重点) id 属性对应的值
name(重点) name 属性对应的值
link test 查找其可见文本与搜索值匹配的锚元素
partial link test 查找其可见文本包含搜索值的锚元素。如果多个元素匹配,则只会选择第一个元素
tag name 标签名称
xpath(重点) xpath 表达式

Python 语法格式

driver.find_element(By.ID, "su")
java 语法格式
driver.findElement(By.id("su"));

创建定位器

要使用 Selenium 在网页上操作网页元素,需要找到它们在网页上的位置。Selenium 提供了上述提到的方式,通过这些方式可以在页面上定位元素。为了理解和创建定位器,我们将使用以下 HTML 代码片段。

<html>
  <body>
    <style>
      .information {
        background-color: white;
        color: black;
        padding: 10px;
      }
    </style>
    <h2>Contact Selenium</h2>

    <form action="/action_page.php">
      <input type="radio" name="gender" value="m" />Male &nbsp;
      <input type="radio" name="gender" value="f" />Female <br />
      <br />
      <label for="fname">First name:</label><br />
      <input
        class="information"
        type="text"
        id="fname"
        name="fname"
        value="Jane"
      /><br /><br />
      <label for="lname">Last name:</label><br />
      <input
        class="information"
        type="text"
        id="lname"
        name="lname"
        value="Doe"
      /><br /><br />
      <label for="newsletter">Newsletter:</label>
      <input type="checkbox" name="newsletter" value="1" /><br /><br />
      <input type="submit" value="Submit" />
    </form>

    <p>
      To know more about Selenium, visit the official page
      <a href="www.selenium.dev">Selenium Official Page</a>
    </p>
  </body>
</html>

class name

HTML 页面的元素可以具有 class 属性,可以通过使用 Selenium 中提供的 classname 来识别这些元素。

Python:

driver.find_element(By.CLASS_NAME, "information")

Java:

driver.findElement(By.className("information"));

css selector

使用 css selector 来进行元素定位(通过比对元素的 id,class,tagname 以及其他属性来完成定位)

Python:

driver.find_element(By.CSS_SELECTOR, "#fname")

Java:

driver.findElement(By.cssSelector("#fname"));

id

通过使用网页上元素的 ID 属性来定位它。通常情况下,元素的 ID 属性在网页上应该是唯一的。使用 id 来识别“姓氏(Last Name)”字段。

Python:

driver.find_element(By.ID, "lname")

Java:

driver.findElement(By.id("lname"));

name

通过使用网页上元素的 NAME 属性来定位。通常情况下,元素的 NAME 属性在网页上应该是唯一的。通过使用 name 来识别“新闻简讯(Newsletter)”复选框。

Python:

driver.find_element(By.NAME, "newsletter")

Java:

driver.findElement(By.name("newsletter"));

通过链接来定位:(链接文本定位器:链接文本是链接显示的文本内容)

Python :

driver.find_element(By.LINK_TEXT, "Selenium Official Page")

Java:

driver.findElement(By.linkText("Selenium Official Page"));

通过部分链接文本来定位:(链接文本定位器:链接文本是链接显示的文本内容)

Python:

driver.find_element(By.PARTIAL_LINK_TEXT, "Official Page")

Java:

driver.findElement(By.partialLinkText("Official Page"));

tag name

可以使用 HTML 标签本身作为定位器,在页面上识别网页元素。通过使用 tag name, HTML 标签“a”来识别链接。

Python:

driver.find_element(By.TAG_NAME, "a")

Java:

driver.findElement(By.tagName("a"));

xpath

一个 HTML 文档可以被视为一个 XML 文档,可以通过使用 XPath 来定位感兴趣的元素,它是到达目标元素的路径。

  • /html/form/input[1]:这将返回值为男性的单选按钮。或者 XPath 可以是相对的。
  • //input[@name='fname']。:这将返回名字文本框。让我们使用XPath来创建定位器,以定位女性单选按钮。

Python:

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

Java:

driver.findElement(By.xpath("//input[@value='f']"));