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后出现。
abovebelowtoLeftOftoRightOfnear返回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))