Selenium一本通

Selenium中文官方文档

从一个测试脚本说起

python 复制代码
from selenium import webdriver #引入selenium webdriver模块
driver = webdriver.Firefox() #初始化Firefox浏览器的webdriver对象,启动浏览器
driver.get("http://cn.bing.com/") #跳转到对应页面
assert 'Bing' in driver.title #检查页面标题是否包含某一信息
driver.quit() #关闭浏览器

Selenium家族

  • Selenium IDE:浏览器组件,提供录制回放功能,可以将录制生成多种编程语言脚本,快速创建测试用例;
  • Selenium Grid:支持分布式测试,在不同平台、浏览器的多态远程机器上同时运行Selenium测试脚本,提交效率;
  • Selenium RC(Remote Control):Java语言编写服务端,处理测试脚本发来的HTTP请求,操作浏览器(Selenium2后与WebDriver合并,使用驻留Chrome、IE、FireFox浏览器);
  • Selenium WebDriver:调用WebDriver对象操作浏览器。

Selense命令集合

  • Action: open\type\click\sendKeys
  • Accessor:将值保存至变量
  • Assertions:检查点。
    1)Assert断言,检查指定条件是否满足,不满足,终止test case运行;
    2)verify验证指定条件是否等于期望值,若不满足,则仅当前步骤失败,继续执行下一步。
  • Wait:等待元素加载完成后操作。
    1)***AndWait执行操作后等待页面刷新完成才进行下一步,如clickAndWait点击并等待;
    2)waitFor*** 等待直到复合某一特定条件才进行下一步,如waitForElementPresent 等待知道指定元素出现在页面上。隐式等待,如果条件满足,就立即执行下一步,否则等到selenium IDE设置的最大等待时间,因此具体等待时间不确定。
  1. pause 显示等待,明确了等待时间,一定等到时间结束为止。
    selenium IDE默认最大等待时间30000ms(30s),超时未找到元素则测试步骤失败,脚本抛出异常。

常见的元素定位方法

F12工具栏第一各图标-在页面中选择一个元素以进行检查,可以以通过悬停在元素上方定位html语言。

选中html语言,点击右键,可以复制selector/xpath等

  1. 通过元素id定位
python 复制代码
WebElement ele = driver.find_element('id', value)
WebElement ele = driver.find_element(By.ID, value)
  1. 元素Name:'name' By.NAME
  2. xpath表达式:'xpath' By.XPATH
  3. 完整超链接:'link text' By.LINK_TEXT
  4. 部分链接:'partial text' By.PARTIAL_LINK
  5. 标签:'tag name' By.TAG_NAME
  6. 类名:'class name' By.CLASS_NAME
  7. css选择器:'css selector' By.CSS_SELECTOR

如何选择定位方法?

首选id,具有唯一性,缺少id属性或id动态刷新时选择其它;

TagName/ClassName:先找到一类元素,再通过具体的顺序位置定位到某一个元素;

LinkTest/PartialLinkTest:定位链接时;

XPath/cssSelector:定位很强大,但定位性能不是很好,可读性也会变差,少数元素不好定位时选择。

实例

一、环境搭建

1. 安装selenium库
shell 复制代码
pip install selenium
2. 安装浏览器驱动

网页链接:Microsoft Edge Driver - Microsoft Edge Developer

简单起见将下载的msedgedriver.exe与py文件放在同一目录下,可以不用配置环境变量。

二、初始化

1. 启动浏览器驱动
python 复制代码
from selenium import webdriver
wd = webdriver.Edge() #"msedgedriver"
2. 设置等待时间
python 复制代码
wd.implicitly_wait(5)
3. 打开网站
python 复制代码
wd.get("https://www.bv2008.cn/app/user/register.php?type=org")
4. 程序的最后关闭浏览器驱动
python 复制代码
wd.quit()

三、选择元素

1. 导入库
python 复制代码
from selenium.webdriver.common.by import By
2. 根据ID查找
python 复制代码
element = wd.find_element(By.ID, 'ID值')
3. 根据css选择器查找
python 复制代码
element = wd.find_element(By.CSS_SELECTOR, 'css选择器')
4. 其他查找方法
python 复制代码
element = wd.find_element(By.CLASS_NAME, 'class属性')
element = wd.find_element(By.TAG_NAME, '标签名')
5. find_element与find_elements
python 复制代码
find_element返回一个元素(第一个)
find_elements返回元素列表

四、操作元素

1. 输入文字:send_keys()
python 复制代码
element.send_keys('文本')			# 用于文本框
2. 点击:click()
python 复制代码
element.click()			# 用于按钮、超链接、单选框、多选框、
3. 下拉框选择
python 复制代码
s = Select(element)
s.select_by_value('value值')
# s.select_by_visible_text('文本信息')

五、切换窗口

1. iframe
python 复制代码
# 进入到iframe
wd.switch_to.frame('iframe名')
# wd.switch_to.frame(element)

# 回到原页面
wd.switch_to.default_content()
2. 切换页面
python 复制代码
for window_handle in wd.window_handles:
    wd.switch_to.window(window_handle)
    if '内容' in wd.title:
        break
相关推荐
哇咔咔哇咔20 分钟前
【科普】conda、virtualenv, venv分别是什么?它们之间有什么区别?
python·conda·virtualenv
CSXB9942 分钟前
三十四、Python基础语法(文件操作-上)
开发语言·python·功能测试·测试工具
亚图跨际1 小时前
MATLAB和Python及R潜变量模型和降维
python·matlab·r语言·生物学·潜变量模型
IT古董2 小时前
【机器学习】决定系数(R²:Coefficient of Determination)
人工智能·python·机器学习
德育处主任Pro2 小时前
『Django』APIView基于类的用法
后端·python·django
Star Patrick2 小时前
算法训练(leetcode)二刷第十九天 | *39. 组合总和、*40. 组合总和 II、*131. 分割回文串
python·算法·leetcode
武子康3 小时前
大数据-213 数据挖掘 机器学习理论 - KMeans Python 实现 距离计算函数 质心函数 聚类函数
大数据·人工智能·python·机器学习·数据挖掘·scikit-learn·kmeans
写点什么啦3 小时前
使用R语言survminer获取生存分析高风险和低风险的最佳截断值cut-off
开发语言·python·r语言·生存分析·x-tile
武子康3 小时前
大数据-214 数据挖掘 机器学习理论 - KMeans Python 实现 算法验证 sklearn n_clusters labels
大数据·人工智能·python·深度学习·算法·机器学习·数据挖掘
娃哈哈_4 小时前
基于Testng + Playwright的H5自动化巡检工具
测试开发·测试工具·自动化·html5·可用性测试·testng·playwright