Selenium 常用的命令和简单解释(Python视角)

Selenium 是一个 Web应用的自动化框架。

作为测试人员,需要做的就是自行编写自动化程序。

Python 有自己的库,Java 也有自己的库…


一、安装

Selenium 环境的安装主要就是安装:客户端库和浏览器驱动。
上述情况是:idle 可以正常运行,而pychram 报错

解决办法:File->Settings ->Project Interpreter

添加完事,即可正常运行


下面是关于基础操作的代码介绍
from selenium import webdriver#选择 浏览器驱动
wb = webdriver.Chrome(r'C:/python37/webdriver.exe')#打开网页
wb.get('http://www.baidu.com')#选择元素的方法
#根据Id 选择
element = wd.find_element_by_id('kw')#根据 class 属性
element = wd.find_element_by_class_name('要找的单个class')
elements = wd.find_elements_by_class_name('要查找的所有class')
#取出符合条件的第一个元素
print(element.text)   # 如果没有 报错
#取出列表中的每一个元素
for element in elements:print(element.text)  #如果没有,返回空列表#通过该 WebElement对象,就可以对页面元素进行操作
element.send_keys('查找圆周率第100位')#关闭浏览器
wb.close()pass

关于selenium 升级之后,find_element 的写法需要更新

原始写法
wd.find_element_by_id('username').send_keys('bilibili')
wd.find_element_by_class_name('password').send_keys('sadqwaea')
wd.find_element_by_tag_name('input').send_keys('asdawew')
wd.find_element_by_css_selector('button[type=submit]').click()Selenium4 find_element写法
#首先导入 By
from selenium.webdriver.common.by import Bywd.find_element(By.ID,'username').send_keys('bilibili')
wd.find_element(By.CLASS_NAME,'password').send_keys('ssadojo')
wd.find_element(By.TAG_NAME,'input').send_keys('sadawda')
wd.find_element(By.CSS_SELECTOR,'button[type=submit]').click()

二、操控元素的基本方法

点击元素

调用元素WebElement对象 的Click() 方法

wb.find_element(By.ID,‘su’).click()

输入字符串

调用元素WebElement对象 的send_keys() 方法

wb = wb.find_element(By.ID,‘username’).send_keys(‘输入的内容’);

获取元素的文本内容

通过WebElement 对象的text属性,可以获取元素 展示在界面上的文本内容

element = wb.find_element_by_id(‘1’)

print(element.text)

获取元素的属性

print(element.get_attribute(‘id’)) # 获取到的就是 id 属性的值

获取整个元素对应的HTML

要想获取整个元素对应的HTML 文本内容,可以使用element.get_attribute(‘outerHTML’)

如果只是想获取整个元素内部的HTML文本内容,可以使用element.get_attribute(‘innerHTML’)

获取输入框

对于input 输入框的元素,要获取里面的输入文本,用text属性是不行的,这个时候可以使用element.get_attribute(‘value’)

element = wb.find_element_by_id(‘inpute_name’)

print(element.get_attribute(‘value’))

获取元素文本内容2

通过WebElement 对象的text 属性,可以获取元素 展示在界面上的 文本内容

但是有些元素没有展示在界面上,这时候用 WebElement 的 text属性,获取文本内容,就会有问题

element.get_attribute(‘innerText’)

或者 element.get_attribute(‘textContent’)


三、Css 表达式

主要是学习 Css selector 语法选择元素

通过 CSS Select 选择单个元素的方法是

find_element_by_css_select(CSS Select 参数)

选择所有元素的方法是

find_elements_by_css_selector(CSS Select 参数)

# 通过 Css 选择器 ,打印目标元素
element = wd.find_element_css_select('.plant')
print(element.get_attribute('outerHTML'))
# 等待加载完毕
time.sleep(2)
# 选择所有的 span 标签内容,
elements = wb.find_elements_by_css_selector('span')
for element in elements:print(element.get_attribute('outerHTML'))# 包含 用* ; 以某个字符串开头 用^;以某个字符串结尾 $
# 选择a 里面href 属性包含了bilibili 字符串,就可以这样写
element = wb.find_element(By.CSS_SELECTOR,'a[href*="bilibili"]')
print(element.get_attribute('outerHTML'))# href 属性以 www 字符串开头
element = wb.find_element(By.CSS_SELECTOR,'a[href^="www"]')
# href 属性以 com 字符串结尾
element = wb.find_element(By.CSS_SELECTOR,'a[href$="com"]')

根据tag名、id、class 选择元素

Css Select 同样可以根据tag 名、id属性和class 属性来选择元素

# 选择所有tag 名为 div 的元素
element = wd.find_elements_by_css_selector('div')
等价于
element =wd.find_elements_by_tag_name('div')

Css 选择器 选择子元素和 后代元素

HTML中,元素内部可以包含 其他元素

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YSgrIgq5-1636975816358)(E:\测试工程师_自动化学习\Selenium\Css 选择器包含子元素.jpg)]

# 元素1> 元素2   元素2 必须是直接子元素
# 元素1  元素2   元素2 可以不是直接子元素elements = wb.find_elements_by_css_selector('#container > div')
for element in elements:print('--------------')print(element.get_attribute('outerHTML'))
根据href 选择
# 下面语句会查到 href 为 www.baidu.com的 位置
elements = wd.find_elements(By.CSS_SELECTOR,'[href="www.baidu.com"]')
# wd.find_elements(By.CSS_SELECTOR,'[href]')
# 打印出对应的内容行
for element in elements:print('----------')print(element.get_attribute('outerHTML'))**********************************
wb.find_element(By.ID,'kw').send_keys('国王排名\n')
time.sleep(3)
elements = wb.find_element(By.ID,'1').find_elements(By.CSS_SELECTOR,'[href]')
for element in elements:print(element.get_attribute('outerHTML'))

浏览器 自带查找功能,可以验证 Css_selector 写的是否正确

.plant , .animal

#id>span,#id>p


按照次序 选择子节点

父元素的第n个节点 使用 nth-child 选择

比如 span:nth-child(2)

如果不加节点

:nth-child(2) # 无论哪个标签,只要是第二个,就会被选中

按照倒数 选择子节点

#id:nth-last-child(1)

指定选择的元素 第几个类型的 子节点

使用nth-of-type

span:nth-of-type(1) # 父元素的 第一个span

span:nth-lash-of-type(1) #父元素的 倒数第一个 span


奇数节点 和偶数节点

如果要选择的父元素的偶数节点,使用 nth-child(even)

如果要选择的父元素的奇数节点,使用 nth-child(odd)

#id p:nth-of-type(even)
兄弟节点选择

选择 h3 后面紧跟着的兄弟节点 span

可以 h3 + span 表示紧跟关系 是 +

如果选择后续所有兄弟节点

h3 ~ span

Css 选择器 介绍的内容都是 如何 精确快速选择 元素


四、Frame 切换/窗口切换

如果要操作被嵌入的html 文档中的元素,就必须切换操作范围 到被嵌入的文档中

切换

# 切换到 frame
wd.switch_to.frame(frame_reference)# 举个例子
wd.switch_to.frame('frame1')
或者
wd.switch_to.frame('innerFrame')# 如果iframe 既没有id 也没有name ,name可以用webelement 定位到frame
wd.switch_to.frame(wd.find_element_by_css_selector('iframe[src="1.html"]'))# 如何退出 frame
wd.switch_to.default_content()

切换到新的窗口

from selenium import webdriver
from selenium.webdriver.common.by import Bywd = webdriver.Chrome(r:'D:\Chromedriver.exe')
wd.implicitly_wait(10)wd.get('http://www.baidu.com')
# 再输入框输入 国王排名
wd.find_element(By.ID,'kw').send_keys('国王排名\n')#打开新窗口链接
#先定位到 这个区域
element = wb.find_element(By.ID,'1')
link = element.find_element_by_tag_name('a')
link.click()# wd.title 属性 是当前窗口的标题栏 文本
print(wd.title) # 此时发现,焦点还是在原来的浏览器,所以需要切换到新窗口# mainWindow 变量保存当前窗口的句柄
mainWindow = wd.current_window_handle# 切换到新的窗口
for handle in wd.window_handles:#先切换到该窗口wd.switch_to.window(handle)#得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口if 'bilibili' in wd.title:#如果是,那么这时候WebDriver 对象就是对应的该窗口,正好,跳出循环,break# 切换回原来的窗口
wd.switch_to.window(mainWindow)

五、单选多选框

radio 框



单选框

# 获取当前选中的元素
element = wb.find_element(By.CSS_SELECTOR,('#id input[checked = checked]'))print('当前选中的是:'+element.get_attribute('value'))# 点选 苹果 这个选项
wb.find_element(By.CSS_SETECTOR,'#id input[value="苹果"]').click()

checkbox 框

李老师
王老师
张老师

上面就是 多选框 checkbox

# 先把 已经选中的选项 全部点击一下
elements = wb.find_elements(By.CSS_SELECTOR,'#id input[checked = "checked"]')
for element in elements:element.click()#再点击 所要选中的选项
wb.find_element(By.CSS_SELECTOR,'#id input[value="王老师"]').click()

select 框

radio 框及 checkedbox 框 都是input 元素,只是 type 类型不同

李老师 王老师 张老师

上面的就是 select 单选下拉框

苹果 橘子 香蕉

上面是多选

# Select 类 提供了如下的方法
# 根据 选项的 value 属性值,选择元素 select_by_value
# 根据 选项的 次序,选择元素  select_by_index
# 根据 选项的 可见文本,选择元素  select_by_visible_text# 不选中状态
# deselect_by_value
# deselect_by_index
# deselect_by_visible_text
# deselect_all
# ===============================================
# Select 单选框
# 导入 Select 类
from selenium.webdriver.support.ui import Select#创建 Select 对象
select = Select(wb.find_element(By.CSS_SELECTOR,'.s_single'))# 通过Select 对象选中 王老师
select.select_by_visible_text("王老师")# =============================================
# Select 多选框
# 导入Select 类
from selenium.webdriver.support.ui import Select# 创建Select 对象
select = select(wb.find_element(By.ID,'ss_multi'))# 清除所有 已经选中 的选项
select.deselect_all()# 选择 李老师 和王老师
select.select_by_visible_text("李老师")
select.select_by_visible_text("王老师")# ===============================================

六、更多动作

比如 要实现 鼠标点击右键、 双击、移动鼠标到某个元素、鼠标拖拽等

可以通过 selenium 提供的 ActionChains 类来实现

# 实现 特殊的动作
# 移动鼠标到某个元素#首先导入 ActionChains
from selenium.webdriver.common.action_chains import ActionChainsac = ActionChains(wb)# 鼠标移动到 元素上
ac.move_to_element(wb.find_element(By.CSS_SELECTOR,'[name="tj_button"]')
).perform()             # perform() 执行动作

冻结界面

在浏览器开发者界面 console 下

输入 下面 js 代码 5000 毫秒 即 5

setTimeout(function(){debugger},5000)

弹出对话框

通知信息 Alert

确认信息框 confirm

需要用户输入信息的 Prompt

# Alert 如何模拟用户点击OK 按钮
driver.switch_to.alert.accept()# 获取 Alert 弹出对话框中的文本
driver.switch_to.alert.text
------------------------------------------------
###### 示例代码  #######
from selenium import webdriver
wb = webdriver.Chrome()
wb.implicity_wait(5)
wb.get('http://www.baidu.com')# ---  alert   ----
wb.find_element(By.ID,'b1').click()# 打印 弹出对话框 提示信息
print(wb.switch_to.alert.text)# 点击 OK 按钮
wb.switch_to.alert.accpet()
# confirm 需要用户确认的弹出框
# 点击 ok 按钮,还是用accept 方法
driver.switch_to.alert.accept()# 点击 Cancel 按钮,可以用 dismiss 方法
driver.switch_to.alert.dismiss()---------------------------------------------
########## 示例代码   ###########
from selenium import webdriver
wb = webdriver.Chrome()
wb.implicity_wait(5)
wb.get('http://www.baidu.com')# -----  confirm -------
wb.find_elemnet(By.ID,'b2').click()# 打印 弹出对话框 提示信息
print(wb.switch_to.alert.text)# 点击 OK 按钮
wb.switch_to.alert.accept()# 点击 Cancel 按钮
wb.switch_to.alert.dismiss()
# prompt  需要用户输入内容,并点击确定
# 可以调用如下方法
wb.switch_to.alert.send_keys()--------------------------------------------------------
##############  示例代码  ###############
from selenium import webdriver
wb = webdriver.Chrome()
wb.implicity.wait(5)
wb.get('http://www.baidu.com')#-----------prompt --------------
wb.find_element(By.ID,'b3').click()# 获取alert 对象
alert = wb.switch_to.alert# 打印 弹出框 提示信息
print(alert.text)# 输入信息,并且点击 ok 按钮提交
alert.send_keys('web自动化 - selenium ')
alert.accept()# 点击 Cancel 按钮 取消
wb.find_element(By.ID,'b3').click()
alert = wb.switch_to.alert
alert.dismiss()

七、Xpath 选择器

# Xpath 选择器
elements = wb.find_element_by_xpath('/html/body/div')# 打印出 body 中所有div
from element in elements:print('------------')print(element.get_attribute('outerHTML'))# //div//p   // 指的是 无论是不是直接子节点,都选择   / 直接子节点# 通配符  *
# //div/*
根据id 属性选择

选择id 为west 的元素,可以这样

#选择id 属性为west 的元素
//*[@id='west']          #只要是id 属性就行
//*[@id]
根据class 属性选择

选择所有div元素中 class 为plant 的元素

#- --------------------------
# 选择所有div元素中 class 为plant 的元素
//div[@class='plant']# 如果一个元素class 有很多个,例如
<p id="beijing" class= "capital huge-city">
北京
</p># 那么xpath 语法应该是
//p[@class="capital huge-city"]
# ---------------------------
# 选择 style 属性值 包含color 字符串的页面元素
//*[contains(@style,'color')]
# 选择 style 属性值 以color 开头的页面元素
//*[starts-with(@style,'color')]
# 选择style 属性值 以color 结尾的页面元素
//*[ends-with(@style,'color')]
根据次序选择
# 要选择 p 类型的 第2个的子元素
//p[2]
# 等价于 CSS 中的
p:nth-of-type(2)# 要选择父元素为 div 中的p 类型 第2 个子元素
//div/p[2]# 要选择 倒数的话 倒数第二 是
//div/p[last()-1]
Xpath 独有的功能
范围选择

xpath 还可以选择子元素的次序范围

# 比如,要获取招聘网站前十个职位信息
# 选取option 类型第1 到2 个子元素
//option[position()<=2]
或者
//option[position()<3]
# 选取 后三个
//option[position()>=last()-2]# 举个实例  multi_choice 类下 的前三个选项
//*[@class='multi_choice']/option[position()<=3]
组选择 和兄弟节点
######### 组选择 ###########
# 比如,要选择所有的option元素和 所有的h4 元素,可以使用
//option | //h4
# 等价于 CSS 选择器
option , h4# 实例
# 要选择所有的class 为 single_choice 和 class 为 multi_choice 的元素
//*[@class='single_choice'] | //*[@class='multi_choice']########## 兄弟节点 #############
# 选择 父节点 ,这是css 做不到的
# 比如 选择id 为china  的节点的父节点
//*[@id='china']/..
# 查爷爷
//*[@id='china']/../..# 兄弟节点选择
# 后续节点 following-siling::
# 比如,要选择 class 为single_choice 的元素所有后续兄弟节点
//*[@class='single_choice']/following-sibling::*# 要选择 class 为 china 的元素所有后续 select 节点
//*[@class='china']/following-sibling::select# 前任节点 preceding-siling::
//*[@class='single_choice']/preceding-siling::*

找到id 为china 下的 所有P 标签

# 找到id 为 china的元素中所有的 p 标签
from selenium import webdriverwb = webdriver.Chrome(r'C:\python37\chromedriver.exe')
wb.implicitly.wait(5)
wb.get('http://www.baidu.com')# 先寻找 id 是china 的元素
china = wd.find_element(By.ID,'china')# 再寻找 该元素内部 的p 元素   # XPATH 的坑  './/p'
elements = china.find_elements(By.XPATH,'.//p')
# .//p 这个点'.'指的是 China 内部找,如果不加点,找的就是所有的 p# 打印结果
for element in elements:print(element.get_attribute('outerHTML'))

八、自动化 Edge 浏览器

配置 环境

  1. 首先需要查看 Edge 的版本 帮助和反馈 > 关于Microsoft Edge
  2. 下载对于版本的 浏览器驱动
# Edge 浏览器 自动化程序编写
from selenium import webdriver
# 指定 驱动地址
wb = webdriver.Edge(r'E:\msedgedriver.exe')wb.get('http://www.baidu.com')input()

自动化Python+selenium 用这一篇学习就够了相关推荐

  1. python自动化框架2019_《一头扎进》系列之Python+Selenium自动化测试框架实战篇6 - 价值好几K的框架,呦!这个框架还真牛叉哦!!!...

    1. 简介 本文开始介绍如何通过unittest来管理和执行测试用例,这一篇主要是介绍unittest下addTest()方法来加载测试用例到测试套件中去.用addTest()方法来加载我们测试用例到 ...

  2. 天猫商城自动化python脚本(仅供初学者学习使用)

    作者:Eason_LYC 悲观者预言失败,十言九中. 乐观者创造奇迹,一次即可. 一个人的价值,在于他所拥有的.可以不学无术,但不能一无所有! 技术领域:WEB安全.网络攻防 关注WEB安全.网络攻防 ...

  3. 0基础该如何快速入门python?全写在这篇学习攻略里了

    目前python是一门相对应比较火爆的编程语言,应用范围也非常的广泛,但目前竞争不大,工资也算乐观,未来发展也极好. 但是对python这个行业根本不了解的情况下,一味的买书看书.看视频,是很难达到预 ...

  4. WEB自动化(Python+selenium)的API

    在做Web自动化过程中,汇总了Python+selenium的API相关方法,给公司里的同事做了第二次培训,分享给大家                                         ...

  5. python+selenium之悠悠博客学习笔记

    1 Python之自动化测试框架selenium学习 offical website 悠悠之selenium浅谈·博客园 悠悠软件测试系列 1.1 基础环境准备 1.1.1 python包下载工具的安 ...

  6. python Selenium爬取数据代码学习 冲!!!

    说明: 本文仅用于selenium相关语法的学习,如有任何问题,欢迎大家批评指正~~ crawl数据保存到csv文件: 这个是不含job详细信息的[即爬取过程中不涉及页面切换] 这个是包含job详细信 ...

  7. web自动化--python+selenium自动化

    目录 自动化测试用例 遵循原则 自动化测试用例设计 测试点转为测试用例的原则 验证码自动化方法 自动化测试模型 线性测试 模块化驱动测试 数据驱动测试 参数化的方式: CSV文件 Excel文件 关键 ...

  8. Python+Selenium 自动化测试 6. Unittest模块学习

    unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果. 源码例 ...

  9. web UI自动化 python+selenium 爬取网易云排行榜歌曲列表

    from selenium import webdriver import time,csv class music163: #定义类 def init(self,ranking): self.ran ...

  10. python-web自动化-Python+Selenium之expected_conditions:各种判断

    expected_conditions一般也简称EC 以下两个条件类验证title,验证传入的参数title是否等于或包含于driver.title title_is title_contains 以 ...

最新文章

  1. 一直在构建版本_球鞋 | 一鞋两穿?AJ1十孔版本登场,拉链设计还是真香了?
  2. 河南城建学院linux期末试题,河南城建学院Linux期末考试复习题
  3. MybatisPlus入门之介绍
  4. 【Java】异常处理的目的
  5. 马斯克脑机接口_如何看待“马斯克:脑机接口或一年内植入人脑,可修复任何大脑问题”?...
  6. java swarm集群_52个Java程序员不可或缺的 Docker 工具
  7. RT-Thread 学习笔记(四)——添加RTGUI组件
  8. DFB [02] 基础和相关的非常用的几个链接
  9. 实训课教案二:计算机软件安装初步
  10. python 使用pymysql执行sql语句,使用try防止出错
  11. 实战 Kaggle 比赛:狗的品种识别(ImageNet Dogs) 动手学深度学习v2 pytorch
  12. 2017-2018论文更新
  13. bt种子增加服务器,bt发布-BT种子怎么发布?服务器地址、发布者网址应怎么填写? 爱问知识人...
  14. 高效工作节省时间的一些小技巧
  15. Easy Excel 使用快速入门
  16. 人工智能有哪些方向?什么方向有前景?
  17. iphone11计算机显示计算过程,iPhone11怎么显示电池百分比
  18. 【金融项目】尚融宝项目(十五)
  19. 数据文献相关数据库 (数学建模\学术论文)
  20. Android 原生语音播报

热门文章

  1. PMP考前资料分享!另送160+项目管理表格模板~
  2. 绿盾加密软件怎么暂停_天锐绿盾加密软件 应用程序限制 网络端口限制 流量限制...
  3. 安装MATLAB2016a的完整步骤
  4. Matlab - Matlab 2016a 安装破解教程
  5. ubuntu 14.04 install teamviewer
  6. 整数规划---指派问题
  7. Unicode 子集 数量统计
  8. 决策树准确率低原因_决策树算法
  9. java图片旋转90度_Java实现图片内容无损任意角度旋转
  10. SeetaFace6人脸识别源码编译和示例运行