selenium复习之---原理+基础用法
简介
1.是什么
selenium是用来进行页面元素定位的第三方库,用来进行web自动化测试的工具,可以直接运行在浏览器中。
2.原理:
selenium在工作过程中有三个角色,selenium客户端、webdriver和浏览器
selenium客户端是开发者与selenium的交互接口,它会发送指令给webdriver
浏览器则接收来自webdriver的执行命令,完成相应的操作
元素定位
- 通过xpath定位
driver.find_element(By.XPATH, '元素路径')
1、绝对路径(不建议)
2、相对路径:从一个符合条件的元素开始,以//开头,后边必须跟标签名称或(表示所有标签)
# 相对路径+索引
//from/span[1]
# 相对路径+属性定位: //标签名[@属性名1 = '属性值']
//input[@autocomplete = 'off']
# 相对路径+文本定位: //标签名[text() = 'x']
//span[text() = '按图片搜索']
- 通过CSS定位
driver.find_element(By.CSS_SELECTOR, '')
# 1.使用#表示id属性
driver.find_element(By.CSS_SELECTOR, "#user")
# 2.使用.表示class属性driver.find_element(By.CSS_SELECTOR, '.tel')
# 3.通过属性定位
[attribute = value]
# 4.通过部分属性值定位
# 通过attribute属性值从value开始的元素
[attribute^ = value]
# 查找attribute属性值中含有value的元素
[attribute* = value]
# 查找attribute属性值以value结尾的元素
[attribute$ = value]
# 5.组合选择器
##1、后代选择器:空格
# 表示div标签内所有的后代元素,子,孙,重孙等
div span
## 2、子代选择器:>
# 表示div内的子集span元素(只包含子类)
div>span
## 3、兄弟选择器:~
# 表示与第一个div是兄弟的,并且是第一个div之后的元素
div~div
## 4、子元素a:nth-child(1)
# 选择第n个<a>里的元素
a:nth-chhild(1)
- 通过ID定位(ID属性)
driver.find_element(By.ID, "value")
- 通过class-name定位(class属性)
driver.find_element(By.CLASS_NAME, "value")
- 通过tag-name定位(tag_name)
driver.find_element(By.TAG_NAME, "input")
- 通过link_text定位(超链接)
driver.find_element(By.LINK_TEXT, "登录")
- 通过partial_link定位(超链接)
driver.find_element(By.PARTIAL_LINK_TEXT, "value")
浏览器操作
1.初始化浏览器对象
from selenium.webdriver import Chrome
# 创建一个浏览器对象,并且打开空页面
browser = Chrome()
2.访问指定网页
from selenium import webdriver
# 初始化浏览器为chrome浏览器
browser = webdriver.Chrome()
# 访问百度首页
browser.get(url)
3.设置浏览器大小
from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get(url)
# 设置浏览器为全屏
browser.maximize_window()
time.sleep(2)
# 设置分辨率为500*500
browser.set_window_size(500, 500)
# 关闭浏览器
browser.close()
4.刷新页面
from selenium import webdriver
browser = webdriver.Chrome()
browser.maximize_window()
browser.get(url)
# 刷新页面
try:
browser.refresh()
except Exception as e:
print("刷新失败")
5.获取页面基本属性
# 网页标题
print(browser.title)
# 获取当前网页网址
print(browser.current.url)
# 获取浏览器的名称
print(browser.name)
# 获取浏览器的网页源码
print(browser.page_sourse)
6.浏览器页面前进和后退
browser = webdriver.Chrome()
browser.maximize_window()
browser.get("https://www.baidu.com")
time.sleep(2)
browser.get("https://www.taobao.com")
time.sleep(2)
# 后退到百度页面
browser.back()
time.sleep(5)
# 前进到淘宝页面
browser.forward()
time.sleep(5)
等待操作
- 隐式等待
# 设置隐式等待
driver.implicitly_wait(15)
- 显示等待
# 动态的等待某个事件。
# 比如:某元素可以被定位到,某元素可以看到
# 实例化等待对象
# 设置等待时间loc
loc = (By.ID, "search-input")
# 按照设定的事件,不断地去定位元素
# 判断元素是否已加载
ele = WebDriverWait(driver, 10).until(EC.presence_of_element_located(loc))
# 判断元素是否可见
WebDriverWait(driver, 10).until(EC.visibility_of_element_located(loc))
- 固定等待
sleep()
页面交互操作
1. 浏览器窗口切换操作
获取当前窗口的句柄:current_window_handle
返回当前浏览器的所有窗口句柄:window_handles
用于切换到对应的窗口:switch_to_windows()
from selenium import driver
import time
browser = webdriver.Chrome()
browser.maximize_window()
browser.get("http://www.baidu.com")
# 新建一个选项卡
browser.execute_script('window.open()')
print(browser.current_window_handle)
print(browser.window.handles)
# 跳转到第二个选项卡
borwser.switch_to_window(browser.window_handles[1])
browser.get("http://www.zhihu.com")
time.sleep(5)
# 回到第一个选项卡并打开淘宝
browser.switch_to_window(browser.window_handle[0])
browser.get("http://taobao.com")
2. html嵌套iframe操作
# 切入iframe
# 使用ID切换
driver.switch_to_frame("idframe2")
# 使用name切换
driver.switch_to_name("myframe2")
# 使用index切换,从0开始
driver.switch_to_frame(1)
3. 下拉框选项处理
涉及到select模块
from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.by import By
import time
url = ""
browser = webdriver.Chrome()
browser.maximize_window()
browser.get(url)
# 获取到对应的标签
select_tag = browser.find_element(By.NAME, "帅哥")
# 根据索引值进行选择
Select(select_tag).select_by_index("2")
# 根据value进行选择
Select(select_tag).select_by_value("草儿")
# 根据文本值进行选择
Select(select_tag).select_by_visible_text("才哥")
time.sleep(5)
鼠标操作
from selenium.webdriver.common.action_chains import ActionChains
# 点击操作
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
browser = webdriver.Chrome()
browser.get(r'https://www.baidu.com')
time.sleep(2)
# 定位到要右击的元素,这里选的新闻链接
click_tag = browser.find_element(By.LINK_TEXT, '新闻')
click_tag.click()
# ActionChains(browser):调用ActionChains()类,并将浏览器驱动browser作为参数
# context_click(right_click):模拟鼠标双击,需要传入指定元素定位作为参数
# perform(): 执行ActionChains()中存储的所有操作,可以看作是执行之前的一系列操作
# 双击
# 定位到要双击的元素
double_click = browser.find_element(By.CSS_SELECTOR, '.accessibility-icon')
ActionChains(browser).double_click(double_click).perfrom()
# 右击
right_click = browser.find_element(By.CSS_SELECTOR, '.accessibility-icon')
ActionChains(browser).context_click(right_click).preform()
# 拖拽
# 开始位置
source = browser.find_element(By.CSS_SELECTOR, "#draggable")
# 结束位置
target = browser.find_element(By.CSS_SELECTOR, "#droppable")
# 执行拖拽
ActionChains(browser).drag_and_drop(source, target).perform()
# 悬停
# 定位悬停的位置
move = browser.find_element(By.ID, "s-usersetting-top")
# 执行悬停操作
ActionChains(browser).move_to_element(move).preform()
按键操作
from selenium.webdriver.common.keys import Keys
# 通过send_keys()方法来模拟键盘上的按键。
JS操作
验证码处理
unittest操作
unittest 框架是python自带的一个单元测试框架,可以进行自动化测试
unittest + selenium => webui 自动化测试
unittest + requests => 接口自动化测试
unittest + appnium = 移动应用自动化测试
1、unittest 核心要素
2、实际应用
- 定义测试用例
- testsuit和testrunner
实例化测试套件:suit01 = unittest.TestSuite()
加入测试方法:suit01.addTest(TestAdd001("test_01"))
实例化runner对象:run01 = unittest.TextTestRunner()
运行:run01.run(suit01) - TestLoader
实例化runner
运行测试用例 - Fixture
方法级的
class Test(unittest.TestCase)
def setUp(self):
print("...")
def tearDown(self):
print("...")
类级的
class Test(unittest.TestCase):
@classmethod
def setUpClass(cls)->None:
print("...")
def tearDownClass(cls)->None:
print("...")
模块级别的
- 用例的跳过
# 在方法前使用跳过,跳过该测试用例
@unittest.skipIf(条件, "message")
# 或者
@unittest.skip("message")
def test(self):
...
...
selenium复习之---原理+基础用法的更多相关文章
- 【Python爬虫】selenium基础用法
selenium 基础用法 阅读目录 初识selenium 基本使用 查找元素 元素互交操作 执行JavaScript 获取元素信息 等待 前进后退 Cookies 选项卡管理 异常处理 初识sele ...
- Nmap扫描原理与用法
Nmap扫描原理与用法 1 Nmap介绍 Nmap扫描原理与用法PDF:下载地址 Nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Audit ...
- 面试准备——(三)Selenium(1)基础问题及自动化测试
转载:https://www.cnblogs.com/lesleysbw/p/6413880.html 面试准备——(三)Selenium(1)基础问题及自动化测试 滴滴面试: 1. 自己负责哪部 ...
- Web安全学习笔记之Nmap扫描原理与用法
1 Nmap介绍 Nmap扫描原理与用法PDF:下载地址 Nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具.软件名字N ...
- 初涉IPC,了解AIDL的工作原理及用法
初涉IPC,了解AIDL的工作原理及用法 今天来讲讲AIDL.这个神奇的AIDL,也是近期在学习的,看了某课大神的解说写下的blog,希望结合自己的看法给各位同价通俗易懂的解说 官方文档:http:/ ...
- Python函数装饰器原理与用法详解《摘》
本文实例讲述了Python函数装饰器原理与用法.分享给大家供大家参考,具体如下: 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值 ...
- ASM的基础用法
本文转载自ASM的基础用法 导语 新闻里使用的热补丁修复方案是基于AspectJ,AspectJ是AOP的一种实现. 无意接触到一种小巧轻便的Java字节码操控框架ASM,它也能方便地生成和改造Jav ...
- PropertyGrid控件由浅入深(二):基础用法
目录 PropertyGrid控件由浅入深(一):文章大纲 PropertyGrid控件由浅入深(二):基础用法 控件的外观构成 控件的外观构成如下图所示: PropertyGrid控件包含以下几个要 ...
- Linux学习之CentOS(二十八)--RAID原理基础及Linux下软件RAID配置
一.RAID的原理基础 在 讲解RAID的原理基础之前,我们首先来了解一下传统磁盘的劣势.我们知道一台PC机种都会包含CPU.内存.主板.硬盘.网卡等硬件,影响计算机性能的 组建包括:CPU.主板总线 ...
- logstash安装与基础用法
若是搭建elk,建议先安装好elasticsearch 来自官网,版本为2.3 wget -c https://download.elastic.co/logstash/logstash/packag ...
随机推荐
- 安装nodejs易遇到的坑
@ 目录 背景描述 流程步骤 小结 背景描述 我的服务器是centos7.9,打算先直接通过yum安装,但是yum不能指定node版本,我直接指定显示404找不到,然后我设置了下node下载的源,还是 ...
- 安卓app 地铁最短路径查询 完成
我通过三个函数 完成了这个功能 首先 创建哈希表 根据起始站名 终点站名 然后 根据哈希表 建立起 邻接表' 最后 根据迪杰斯特拉算法 完成这个功能 /** * function:起终查询 */ / ...
- 为什么https要使用证书
为什么https要使用证书 什么是httpshttps不是一种新的协议,只是http的通信接口部分使用了ssl和tsl协议替代,加入了加密.证书.完整性保护的功能. 加密:共享密钥加密加密和解密公用一 ...
- Java8 多线程及并行计算demo
Java8 多线程及并行计算demo #接口 public interface RemoteLoader { String load(); default void delay() { try { T ...
- Django项目结构和子应用介绍
项目结构 1.1.1 app项目配置 文件存放settings.py.urls.py.wsgi.py等 1.1.2 子应用配置 Migrations: 数据库模型的脚本,包括新增或更新了models的 ...
- 使用Spleete进行人声与背景声分离
安装:https://pypi.org/project/spleeter/ 下载权重: 2sterms.tar.gz https://github.com/deezer/spleeter/releas ...
- Java中final用法与详解
final作为Java中经常用到的关键字,了解final的使用方法是非常有必要的. 这里从final关键字在数据域.方法和类中三个方面分析final关键字的主要用法. final应用于基本数据类型 1 ...
- Java核心基础之数据类型
Java内置数据类型 计算机基础知识 bit 位 ,即0或者1, 0101010110 byte字节,8位作为⼀个字节,字节是处理数据的基本单位 1 byte = 8bits 1KB = 1024 b ...
- JVM学习笔记-如何在IDEA打印JVM的GC日志信息
若要在Idea上打印JVM相应GC日志,其实只需在Run/Debug Configurations上进行设置即可. 拿<深入Java虚拟机>书中的3-7代码例子来演示,如 1 public ...
- LSTM实现文本情感分类demo
import torch import torch.optim as optim import torch.nn as nn import numpy as np import torch.nn.fu ...