元素(对象)的定位和操作是自动化测试的核心部分,其中操作是建立在定位的基础上的,因此元素的定位就显得非常重要。
一个对象就像一个人,他会有各种的特征(属性),比如我们可以通过一个身份证号、姓名或者他所住的地址找到这个人。那么一个元素也是具有类似的属性,我们可以通过这种唯一区别于其它元素的属性来定位这个元素。当然,除了要操作元素时需要定位元素外,为了获取元素中的文本、属性值或数量也需要定位元素。
1 元素定位的方法
webdriver提供了一系列的元素定位方法,常用的有以下几种:
以百度为例from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
-
driver.find_element_by_id():根据
id
来查找某个元素。等价于:
driver.find_element_by_id('kw')
driver.find_element(By.ID,'kw')
-
driver.find_element_by_name():根据
name属性的值
来查找元素。等价于:
driver.find_element_by_name('wd')
driver.find_element(By.NAME,'wd')
-
driver.find_element_by_class_name():根据
类名
来查找元素。等价于:
driver.find_element_by_class_name('s_ipt')
driver.find_element(By.CLASS_NAME,'s_ipt')
-
driver.find_elements_by_tag_name():根据
标签名
来查找元素。等价于:
driver.find_elements_by_tag_name('input')
driver.find_elements(By.TAG_NAME,'input')
-
driver.find_element_by_xpath():根据
xpath语法
来获取元素。等价于:
driver.find_element_by_xpath('//input[@id="kw"]')
driver.find_element(By.XPATH,'//input[@id="kw"]')
-
driver.find_element_by_css_selector():根据
css选择器
来选择元素。等价于:
driver.find_element_by_css_selector('#kw')
driver.find_element(By.CSS_SELECTOR,'#kw')
-
driver.find_element_by_link_text():根据
文字链接的全部文本
来获取元素。等价于:
driver.find_element_by_link_text('学术')
driver.find_element(By.LINK_TEXT,'学术')
-
driver.find_element_by_partial_link_text():根据
文字链接的部分文本
来获取元素。等价于:
driver.find_element_by_partial_link_text('hao')
driver.find_element(By.PARTIAL_LINK_TEXT,'hao')
注意:
-
find_element
和find_elements
的区别:返回一个元素和返回元素列表 -
by_link_text
和by_partial_link_tex
的区别:全部文本和包含某个文本
2 获取元素中的数据
find_element仅仅能够获取元素,不能够直接获取其中的数据,如果需要获取数据需要使用以下方法:
- 获取文本:
element.text
text = driver.find_element_by_partial_link_text('hao').text
print(text)
- 获取属性值:
element.get_attribute("属性名")
attribute = driver.find_element_by_id('su').get_attribute('value')
print(attribute)
- 获取元素的尺寸:
element.size
size = driver.find_element_by_id('kw').size
print(size)
- 元素是否用户可见:
element.is_displayed()
,返回True
或Flase
see = driver.find_element_by_id('kw').is_displayed()
print(see)
3 对元素操作的方法
- 填写输入框:
send_keys('输入内容')
sleep(2)
driver.find_element_by_id('kw').send_keys('selenium自动化测试')
- 清空输入框:
clear()
sleep(2)
driver.find_element_by_id('kw').send_keys('selenium自动化测试')
sleep(2)
driver.find_element_by_id('kw').clear()
- 单击元素:
click()
- 单击按钮,示例:
百度一下
按钮
sleep(2)
driver.find_element_by_id('kw').send_keys('selenium自动化测试')
sleep(2)
driver.find_element_by_id('su').click()
2.单击文字链接,示例:hao123
链接
sleep(2)
driver.find_element_by_partial_link_text('hao123').click()
3.单击图片,示例:输入框上面的图片
sleep(2)
driver.find_element_by_tag_name('area').click()
4.单击下拉按钮,示例:右上角的更多产品
的文库
sleep(2)
driver.find_element_by_css_selector('a.bri').click()
sleep(2)
driver.find_element_by_name('tj_wenku').click()
- 提交表单:
submit()
sleep(2)
driver.find_element_by_id('kw').send_keys('selenium提交表单')
sleep(2)
driver.find_element_by_id('su').submit()
注意:
-
click()用于单击任何可以点击的元素,文字/图片链接,按钮,下拉按钮等。
-
submit()要求提交对象是一个表单,更强调对信息的提交。比如:一个文字链接不能用submit()方法。
-
click()更强调事件的独立性。
网友评论