UI自动化之selenium
1011 字
5 分钟
UI自动化之selenium
用例结果缩写
.:passed,通过F:failed,失败(用例执行时报错)E:error,出错(fixture 执行报错)s:skipped,跳过X:xpassed,预期外的通过(不符合预期x:xfailed,预期内的失败(符合预期)
全面定位入门案例⭐⭐⭐:
#库import timefrom selenium import webdriverfrom selenium.webdriver.common.by import By# 导入 ChromeDriver 的服务配置类。#一个管"怎么启动浏览器",一个管"浏览器长什么样"。from selenium.webdriver.chrome.service import Servicefrom selenium.webdriver.chrome.options import Options#常用配置def peizhi(): # 创建 Chrome 浏览器启动选项。 options = webdriver.ChromeOptions() #设置沙盒,提高兼容性 options.add_argument("--headless") # 浏览器保持打开,方便脚本结束后观察页面结果。 options.add_experimental_option("detach", True) # r"..." 表示原始字符串,Windows 路径中的反斜杠不需要额外转义。 service = Service(executable_path="D:\Program Files\Python\chromedriver.exe") #使用变量 driver = webdriver.Chrome(service=service, options=options) return driver
#示例代码d=peizhi()d.get("https://www.baidu.com")time.sleep(2)#最大化窗口# # 浏览器打开位置d.set_window_position(100,100)# 浏览器打开尺寸d.set_window_size(300,300)# 浏览器全屏d.maximize_window()# 浏览器截图d.get_screenshot_as_file('4.png')# time.sleep(2)# # 刷新当前网页# d.refresh()## 定位元素# d.find_element(By.ID,'IDXXX')和d.find_elements(By.ID,'IDXXX')
def Byelement(): text=d.find_element(By.ID,'chat-textarea') #BYNAME text=d.find_element(By.NAME,'NAMEXXX') #BYCLASS text=d.find_element(By.CLASS,'CLASSXXX') #BYclassname不能有空格否则报错; #ByTagName text=d.find_element(By.TAG_NAME,'TAG_NAMEXXX') #BylinKTEXT text=d.find_element(By.LINK_TEXT,'新闻') #ByPartialLinkText text=d.find_element(By.PARTIAL_LINK_TEXT,'新闻') #元素输入 text.send_keys('bilibili') time.sleep(5) text=d.find_element(By.NAME) #点击 d.find_element(By.ID,'chat-submit-button').click() time.sleep(2) text.clear() time.sleep(2) d.quit()八大定位元素:
1-6
定位方式 id
举例:<input type= "text" id= "name" />
定位方式 name
举例:<input type= "text" name= "pwd" />
定位方式 class_name
举例:<input class= "top" />
定位方式 标签tag_name(基本不用)
举例:<input />
定位方式 link_text
举例:<a>黑马程序员</a>
driver.find_element(By.LINK_TEXT,"登录").click()
定位方式 partial_link_text
举例:<a>学IT来黑马程序员,IT黑马</a>
7 CSS(内含 4 种)** ⭐⭐⭐
ID 选择器
- 适用条件:标签元素带有 ID 属性
- 书写格式:
value="#id属性值"
类选择器
- 适用条件:标签元素带有 class 属性
- 书写格式:
value=".class属性值"
标签选择器(如 input)
- 书写格式:
value="标签名"
属性选择器
- 属性定位:
value="[属性名='属性值' (and 属性名1='属性值1' and 2='2')]"
value="[属性名='属性值'][ 属性名1='属性值1' ] [2='2']" - 层级定位:如果使用 CSS 的时候,有复杂层级关系,
value 值使用:
标签名#ID 属性值 > 标签名 > 标签名.class 属性值使用示例:
from selenium.webdriver.common.by import By# ID选择器示例driver.find_element(By.CSS_SELECTOR, "#username")# 类选择器示例driver.find_element(By.CSS_SELECTOR, ".login-input")# 元素选择器示例driver.find_element(By.CSS_SELECTOR, "input")# 任意属性选择器示例driver.find_element(By.CSS_SELECTOR, "[type='password']")driver.find_element(By.CSS_SELECTOR, "[type*='?password?(模糊)']")driver.find_element(By.CSS_SELECTOR, "[type^='password???(开头)']")driver.find_element(By.CSS_SELECTOR, "[type$='???password(结尾)']")#浏览器内置唯一选择器:直接复制selecter选项driver.find_element(By.CSS_SELECTOR, "复制值")8XPath⭐⭐⭐
针对 XML 格式;
1. 绝对路径
- 定义:从最外层元素到指定元素之间所有经过的元素层级的路径,层级关系依赖强,不建议使用
- 写法:以
/开头,从 html 根节点开始,使用/分隔元素层级 - 示例:
/html/body/div/fieldset/form/p[1]/input
2. 相对路径
定义:从目标定位元素的任意层级的上级元素开始到目标元素所经过的层级的路径
写法:以 // 开始,后续每个层级都使用 / 来分隔
示例://p[3]/input
注意:[index]从 1 开始
3.相对路径+属性定位 ⭐⭐⭐
原理:利用元素的属性来定位
- 单属性语法:
- 指定标签:
//标签名[@属性名="属性值"] - 任意标签
*://*[@属性名="属性值"]
- 指定标签:
- 多属性联合语法:
//*[@属性名1="属性值" and @属性名2="属性值"]
注意事项:标签名可以使用 * 来代替任意标签
4.相对路径+文本定位* ⭐⭐⭐
//*[test()="登录"]
隐性等待 implicitly wait
用于设定时间内重复等待元素渲染成功,
获取标签页句柄并切换
a1.window_handles #本质是个数据容器列表a1.switch_to.window(?)弹窗
d.switch_to.alert.accept()d.switch_to.alert.discuss()d.switch_to.alert.send_key('')d.switch_to.alert.text是否可见+获取文本
d.find_element(?,?).textd.find_element(?,?).is_displayed()网页前进后退
d.forward();d.back()Frame 切换⭐
a2=driver.find_element(?,?frame) #获取frame位置driver.switch_to.frame(a2)#返回切换前的页面driver.switch_to.default_content()支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!