UI自动化之selenium

1011 字
5 分钟
UI自动化之selenium

用例结果缩写#

  • .:passed,通过
  • F:failed,失败(用例执行时报错)
  • E:error,出错(fixture 执行报错)
  • s:skipped,跳过
  • X:xpassed,预期外的通过(不符合预期
  • x:xfailed,预期内的失败(符合预期)

全面定位入门案例⭐⭐⭐:#

#库
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
# 导入 ChromeDriver 的服务配置类。
#一个管"怎么启动浏览器",一个管"浏览器长什么样"。
from selenium.webdriver.chrome.service import Service
from 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 />

举例:<a>黑马程序员</a> driver.find_element(By.LINK_TEXT,"登录").click()

举例:<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(?,?).text
d.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()

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
Profile Image of the Author
Firefly
Hello, I'm Firefly.
公告
欢迎来到我的博客!这是一则示例公告。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
34
分类
11
标签
49
总字数
46,777
运行时长
0 天
最后活动
0 天前

文章目录