selenium+python之元素定位方式介绍
网页自动化测试最基本的要求就是要定位到各个元素,然后才能对该元素进行各种操作(输入,点击,清除,提交等),所以今天来总结下Selenuim+Python最基本的几种定位方式及实例说明, 以百度搜索输入框为例,用谷歌浏览器具体说明各个定位方式的用法。
1.导入selenium包的webdriver方法
输入 from selenium import webdriver
2.从 time 模块中引入sleep函数,使用sleep函数可以让程序休眠
输入 from time import sleep
3.打开浏览器
(1)获取浏览器驱动,并打开谷歌浏览器,注意浏览器的第一个字母要大写
dr=webdriver.Chrome()
(2)打开被测网页
url = "https://www.baidu.com/"
dr.get(url)
4.元素定位方法
(1)通过id定位----find_element_by_id()
实例:dr.find_element_by_id("kw").send_keys("selenium自动化") #输入搜索关键字
注意点:id值必须是唯一的,id值是动态变化的,则不能使用该方法定位。
(2)通过name定位----find_element_by_name()
实例:dr.find_element_by_name("wd").send_keys("selenium自动化") #输入搜索关键字
注意点:name值也必须是唯一的。
(3)通过class_name定位----find_element_by_class_name()
实例:dr.find_element_by_class_name("s_ipt").send_keys("selenium自动化") #输入搜索关键字
注意点:class_name的值也必须是唯一的。
(4)通过link_text定位----find_element_by_link_text()
实例:dr.find_element_by_link_text("新闻").click()#点击按钮
注意点:link_text的值也必须是唯一的。
(5)通过partial_link_ text模糊文字定位----find_element_by_partial_link_text()
实例:dr.find_element_by_partial_link_text("改革开放").click() #点击按钮
注意点:link_text的值也必须是唯一的。
(6)通过tag_name定位----find_element_by_tag_name()
实例:dr.find_element_by_tag_name("input").send_keys("selenium自动化") #输入搜索关键字
标签名字最容易重复,当定位一组数据时,可使用
inputBoxes = dr.find_elements_by_tag_name("input")
for inputBox in inputBoxes:
if inputBox.get_attribute("maxlength") == "255" and \
inputBox.get_attribute("sautocomplete") == 'off':
inputBox.send_keys("selenum自动化")
(7)通过xpath定位,XPath是一种XML文档中定位元素的语言----find_element_by_xpath()
(7.1).根据绝对路径来定位
path1="/html/body/div/div/div/div/div/form/span/input"
dr.find_element_by_xpath(path1).send_keys("selenum自动化") #输入搜索关键字
(7.2).根据元素属性定位
dr.find_element_by_xpath("//input[@autocomplete='off']").send_keys("selenum自动化")#输入搜索关键字
(7.3).根据通过多个属性组合定位
dr.find_element_by_xpath("//input[@autocomplete='off' and @id='kw']").send_keys("selenum自动化")#输入搜索关键字
注意点:括号内的引号和方括号内的引号不能一样。
(7.4).通过层次与属性组合定位
path1 = "//span/input[@class='s_ipt']"
dr.find_element_by_xpath(path1).send_keys("selenum自动化")#输入搜索关键字
8.通过CSS定位----find_element_by_css_selector()
(8.1).通过class属性
dr.find_element_by_css_selector(".'s_ipt").send_keys("selenum自动化")#输入搜索关键字
注意点:.号表示通过class属性来定位元素
(8.2).通过id属性定位元素
dr.find_element_by_css_selector("#kw")
注意点:#号表示通过id属性来定位元素
(8.3).通过标签名定位元素
dr.find_element_by_css_selector("input")
(8.4)通过属性定位元素(挺常用的)
dr.find_element_by_css_selector("[name='wd']")
dr.find_element_by_css_selector("[maxlength='255']")
属性值包含某个值
属性值包含wd:适用于由空格分隔的属性值。
dr.find_element_by_css_selector("[name~='wd']")
(8.5)通过层级的父子定位元素
查找有父亲元素的标签名为span,它的所有标签名叫input的子元素
dr.find_element_by_css_selector("span>input")
(8.6)通过层级与属性组合定位
标签名#id属性值:指的是该input标签下id属性为kw的元素
dr.find_element_by_css_selector("input#kw")
标签名.class属性值:指的是该input标签下class属性为s_ipt的元素
dr.find_element_by_css_selector("input.s_ipt")
标签名[属性=’属性值‘]:指的是该input标签下name属性为wd的元素
dr.find_element_by_css_selector("input[name='wd']")
父元素标签名>标签名.class属性值:指的是span下的input标签下class属性为s_ipt的元素
dr.find_element_by_css_selector("span>input.s_ipt")
9.通过By定位元素
定位的类型包括By.ID,By.NAME,By.CLASS_NAME,By.TAG_NAME,By.LINK_TEXT,By.PARTIAL_LINK_TEXT,By.XPATH,By.CSS_SELECTOR
具体定位方式参考上方1-8的说明。
实例:dr.find_element(By.ID,'kw')
注意:使用By定位方式,需先导入By类。
5.实例登录QQ邮箱
#导入selenium包的webdriver方法
from selenium import webdriver
#导入By类
from selenium.webdriver.common.by import By
#引入sleep函数
from time import sleep
#获取浏览器驱动,并打开浏览器
dr=webdriver.Chrome()
url="https://mail.qq.com/"
dr.get(url)
sleep(2)
#将浏览器窗口最大化
dr.maximize_window()
sleep(2)
#定位表单位置
frame = dr.find_element_by_id('login_frame')
dr.switch_to.frame(frame)
dr.find_element_by_id('switcher_plogin').click()
#输入用户名密码,并点击登录按钮
dr.find_element_by_id('u').send_keys('****@qq.com')
dr.find_element_by_id('p').send_keys('password')
dr.find_element_by_id('login_button').click()
dr.switch_to_default_content()