一、元素定位概念
1.1元素定位的意义
UI自动化,就是要用程序来替代手工测试,只有准确的把握网站上的每一个元素(标签),才能进行自动化测试
1.2如何进行元素定位
两种方式
- 通过元素的信息进行定位: 元素的信息就是指元素的标签名以及元素的属性
- 通过元素的层级进行定位:元素的层级结构就是指元素之间相互嵌套的层级结构
- 定位的原则: 尽量是获取到唯一的元素,而不是获取到多元素(列表)之后,再用下标去定位
二、元素定位的方式
2.1 浏览器开发者工具介绍
- 浏览器开发者工作主要用来查看元素的信息, 同时也可以查看接口的相关信息。
- 浏览器开发者工作不需要安装,浏览器自带.
- 浏览器开发者工具的启动:
- 直接按F12 不区分浏览器
- 通过右键的方式来启动浏览器开发者工具 (谷歌浏览器右键选择“检查”, 火狐浏览器右键选择“检查元素”
- 浏览器开发者工具使用
- 点击 浏览器开发者工具左上角的 元素查看器按钮
- 再点击想要查看的元素
2.2通过元素的信息定位
- id定位
- name定位
- tag_name定位
- class_name 定位
- link_text定位
- partail_link_text定位
如果有重复的元素,定位到的元素默认都是第一个元素( find_element … 开头的方法获取的都是一个元素)
2.2.1 id定位
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("file:///C:/Users/Administrator/Desktop/pagetest/%E6%B3%A8%E5%86%8CA.html")
driver.find_element_by_id("userA").send_keys("admin")
time.sleep(3)
driver.quit()
2.2.2 name定位
- 通过元素的name属性值,进行定位
- 前提: 元素必须有name属性
- 方法:find_element_by_name(name) #name参数表示元素的name值 element方法都是查询一个元素的
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("file:///C:/Users/Administrator/Desktop/pagetest/%E6%B3%A8%E5%86%8CA.html")
driver.find_element_by_name("userA").send_keys("admin")
driver.find_element_by_name("passwordA").send_keys("123456")
time.sleep(5)
driver.quit()
2.2.3 class_name定位
- 通过元素的class属性值进行元素定位 class属性值是可重复的
- 前提:元素必须要有class属性
- 方法: find_element_by_class_name(class_name) # class_name参数表示的是class的其中一个属性值
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("file:///C:/Users/Administrator/Desktop/pagetest/%E6%B3%A8%E5%86%8CA.html")
driver.find_element_by_class_name("telA").send_keys("18611111111")
driver.find_element_by_class_name("dzyxA").send_keys("123@qq.com")
time.sleep(5)
driver.quit()
2.2.4 tag_name定位
-
通过元素的标签名称进行定位, 在同一个html页面当中,相同标签元素会有很多。 这种定位元素的方式不建议在工作当中使用。 -
方法: find_element_by_tag_name(tag_name) # tag_name表示的是元素的标签名
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("file:///C:/Users/Administrator/Desktop/pagetest/%E6%B3%A8%E5%86%8CA.html")
driver.find_element_by_tag_name("input").send_keys("admin")
time.sleep(5)
driver.quit()
2.2.5 link_text定位
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("file:///C:/Users/Administrator/Desktop/pagetest/%E6%B3%A8%E5%86%8CA.html")
time.sleep(3)
driver.find_element_by_link_text("新浪").click()
time.sleep(3)
driver.quit()
2.2.6 partial_link_text定位
- 通过超链接的局部文本信息进行元素定位,主要用来定位a标签
- 定位方法:find_element_by_partial_link_text(partial_link_text) # partial_link_text表示的是a标签 的局部文本内容
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("file:///C:/Users/Administrator/Desktop/pagetest/%E6%B3%A8%E5%86%8CA.html")
time.sleep(3)
driver.find_element_by_partial_link_text("网站").click()
time.sleep(3)
driver.quit()
2.3定位一组元素
find_elements…开头的方法就是获取一组元素,返回列表,可通过下标获取指定元素
-
定位一组元素的方法: find_elements_by_id(id) find_elements_by_name(name) find_elements_by_class_name(class) find_elements_by_tag_name(tag_name) find_elements_link_text(text) find_elements_partial_link_text(text)
以下三种涉及元素层级定位方式,后期再讲
find_elements(value) find_elements_by_xpath(xpath表达式) find_elements_by_css_selector(css表达式) -
定位一组元素返回的值是一个列表 -
可以通过下标来使用列表中的元素 -
下标是从0开始。
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("file:///C:/Users/Administrator/Desktop/pagetest/%E6%B3%A8%E5%86%8CA.html")
inputs = driver.find_elements_by_tag_name("input")
print(inputs)
inputs[1].send_keys("123456")
time.sleep(3)
driver.quit()
|