Selenium 自动化测试学习总结

大概了解一下即可,现在主要用的自动化工具是 playWright,它可以录制操作。

selenium是老款自动化测试工具,仍有很多可取之处。

安装:

pip install selenium即可。然后下载浏览器的驱动包,注意不是浏览器!

然后解压驱动包,将里面的exe程序放入python下载的位置。就不用添加环境变量了,因为python这个位置一般都已经添加了环境变量。

使用驱动打开浏览器的方式:wd = webdriver.Chrome() //最简洁方式,已经添加到环境变量中了。 wd = webdriver.Edge(service=Service(r'D:\work_soft\python\msedgedriver.exe')) //未添加到环境变量,需要指定路径。

对比playWright,selenium需要下载对应驱动包。而playwright一个命令即可完成。且操作命令也有些不同,但css选择器是一样的,html文档的节点也是一样的。

选择元素的方法:

根据 id属性 选择元素 :# 根据id选择元素,返回的就是该元素对应的WebElement对象 element = wd.find_element(By.ID, 'kw')

通过element.send_keys('信息')方法操作元素。//输入文本信息

**根据 class属性:**wd.find_elements(By.CLASS_NAME, 'animal') 注意这里find_elements多一个s,表示返回多个元素。通过for element in elements: print(element.text) 打印文本信息。

tag名 选择元素:elements = wd.find_elements(By.TAG_NAME, 'div') 用法同上。

find_element与find_elements返回的数量不一样。

通过WebElement对象选择元素:实质就是嵌套。第一个元素对象还可以使用find_element的方法。

等待界面元素出现:# 等待 1 秒 from time import sleep sleep(1) 。注意palyWright的等待界面元素出现的方法不能用sleep。

操控元素的方法:

点击元素:调用webElement对象的click方法。

输入元素信息:send_keys方法。

复制代码
wd.find_elements(By.CLASS_NAME,'result-item').send_keys("文本信息")

获取元素信息 :print(element.text)
获取输入框的文字 :element.get_attribute('value')
获取元素的属性值:element.get_attribute('class')

CSS表达式

通过 CSS selector 语法选择元素。

选择单个元素:find_element(By.css_SELECTOR,CSS Selector参数)

根据 tag名、id、class 选择元素:例如:element = wd.find_element(By.CSS_SELECTOR, '#searchtext')

选择 子元素 和 后代元素 :如果 元素2元素1 的 直接子元素, CSS Selector 选择子元素的语法是这样的:元素1>元素2

根据属性选择 :css 选择器支持通过任何属性来选择元素,语法是用一个方括号 [] 。<a href="http://www.miitbeian.gov.cn">苏ICP备88885574号</a>

比如要选择上面的a元素,就可以使用 [href="http://www.miitbeian.gov.cn"] 。这个表达式的意思是,选择 属性href值为 http://www.miitbeian.gov.cn 的元素。

当然,前面可以加上标签名的限制,比如 div[class='SKnet'] 表示 选择所有 标签名为div,且class属性值为SKnet的元素。

复制代码
# 根据属性选择元素
element = wd.find_element(By.CSS_SELECTOR, 'div[class="daad"]')

如果一个元素具有多个属性

复制代码
<div class="misc" ctype="gun">沙漠之鹰</div>

CSS 选择器 可以指定 选择的元素要 同时具有多个属性的限制,像这样 div[class=misc][ctype=gun]

frame切换/窗口切换:

切换回 最外部的 HTML 中 wd.switch_to.default_content()

然后再 选择操作 外部的 HTML 中 的元素 wd.find_element_by_id('outerbutton').click()

选择框:

复制代码
<div id="s_radio">
  <input type="radio" name="teacher" value="小江老师">小江老师<br>
  <input type="radio" name="teacher" value="小雷老师">小雷老师<br>
  <input type="radio" name="teacher" value="小凯老师" checked="checked">小凯老师
</div>

上述是单选按钮,# 获取当前选中的元素

element = wd.find_element(By.CSS_SELECTOR, '#s_radio input[name="teacher"]:checked') print('当前选中的是: ' + element.get_attribute('value'))

其中 #s_radio input[name="teacher"]:checked 里面的 :checked 是CSS伪类选择

checkbox框:它的用法同单选框。都是由input标签得到。

select框 :对于Select 选择框, Selenium 专门提供了一个 Select类 进行操作。即select_by_value方法。复选框,存在次序,即select_by_index(次序),从0开始。

复制代码
# 导入Select类
from selenium.webdriver.support.ui import Select

# 创建Select对象
select = Select(wd.find_element(By.ID, "ss_single"))

# 通过 Select 对象选中小雷老师
select.select_by_visible_text("小雷老师")

# 清除所有 已经选中 的选项
select.deselect_all()

实战技巧:

手机模式:

复制代码
from selenium import webdriver

mobile_emulation = { "deviceName": "Nexus 5" }

edge_options = webdriver.EdgeOptions()
edge_options.add_experimental_option("mobileEmulation", mobile_emulation)
driver = webdriver.Edge(options=edge_options)

driver.get('http://www.baidu.com')

input()
driver.quit()

Xpath选择器:

前面都是CSS 选择器的方式,例如,input[ name =' ']这样表示参数。

此外也需要学习Xpath,它还有其他领域会使用到,比如 爬虫框架 Scrapy, 手机App框架 Appium。

xpath表达式 /html/body/div ,就是一个绝对路径的xpath表达式, 等价于 css表达式 html>body>div

根据属性选择 :根据属性来选择元素 是通过 这种格式来的 [@属性名='属性值']

选择所有 select 元素中 class为 single_choice 的元素,可以这样 //select[@class='single_choice']

选择 id 为 west 的元素,可以这样 //*[@id='west']

如果一个元素class 有多个,比如

复制代码
<p id="beijing" class='capital huge-city'>
    北京    
</p>

如果要选 它, 对应的 xpath 就应该是 //p[@class="capital huge-city"]不能只写一个属性,像这样 //p[@class="capital"] 则不行。

要在某个元素内部使用xpath选择元素, 需要 在xpath表达式最前面加个点

相关推荐
西岸行者10 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意10 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码10 天前
嵌入式学习路线
学习
毛小茛10 天前
计算机系统概论——校验码
学习
babe小鑫10 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms10 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下10 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。10 天前
2026.2.25监控学习
学习
im_AMBER10 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J10 天前
从“Hello World“ 开始 C++
c语言·c++·学习