Selenium+Python自动化测试(3)-元素定位


Selenium+Python自动化测试(3)-元素定位

定位策略

根据官网统计,有8种不同的WebDriver定位策略:

定位策略 实例 解释
id
元素的id属性
name
元素的name属性
class name
元素的class属性
tag name
tag是指html元素,比如div,input,a,table等等
link text 新闻 超链接的文本内容
partial link text 新闻 超链接文本的模糊匹配,只截取一部分
css selector
CSS选择器。可以使用浏览器的F12选项,直接复制选定的元素
xpath
使用xpath的方式定位。可以使用浏览器的F12选项,直接复制选定的元素

定位元素

精准定位

# 1. 方法中使用定位种类. find_element(by, value)
# id = By.ID
# tag name = By.TAG_NAME
# name = By.NAME
# class name = By.CLASS_NAME
# css selector = By.CSS_SELECTOR
# link text = By.LINK_TEXT
# partial link text = By.PARTIAL_LINK_TEXT
# xpath = By.XPATH
driver.find_element(By.ID, 'su')
# 2. 直接使用不同种类的定位方法
driver.find_element_by_id('su')
driver.find_element_by_name('name')
driver.find_element_by_xpath('xpath')
driver.find_element_by_tag_name('tag_name')
driver.find_element_by_class_name('class_name')
driver.find_element_by_link_text('link_text')
driver.find_element_by_partial_link_text('partial_link_text')
driver.find_element_by_css_selector('css_selector')
# 3. 按照同一种类型的定位元素进行顺序定位
driver.find_element_by_css_selector('#cheese #cheddar')
# 4. 同时定位多个元素
# 在element后面加一个s
driver.find_elements_by_id('id')

相对定位

通过定位元素的上下左右邻近(指UI展示层上的位置),获得准确的定位元素。该特性在Selenium4后出现。

  • above
  • below
  • toLeftOf
  • toRightOf
  • near 返回50px之内的
from selenium.webdriver.common.by import By
from selenium.webdriver.support.relative_locator import locate_with

# above
passwordField = driver.find_element(By.ID, "password")
emailAddressField = driver.find_element(locate_with(By.TAG_NAME, "input").above(passwordField))
# below
passwordField = driver.find_element(locate_with(By.TAG_NAME, "input").below(emailAddressField))
# toleftOf
cancelButton = driver.find_element(locate_with(By.TAG_NAME, "button").
to_left_of(submitButton))
# torightOf
submitButton = driver.find_element(locate_with(By.TAG_NAME, "button").
to_right_of(cancelButton))
# near
emailAddressField = driver.find_element(locate_with(By.TAG_NAME, "input").
near(emailAddressLabel))