首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

selenium复习之---原理+基础用法

编程知识
2024年08月05日 22:02

简介

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):
  ...
  ...
From:https://www.cnblogs.com/piaoduo-yf/p/18340266
本文地址: http://shuzixingkong.net/article/824
0评论
提交 加载更多评论
其他文章 在Vue3中如何为路由Query参数标注类型
与以往的OOP或者Class方案不同,Zova在界面交互层面仍然采用Setup语法,仅仅在业务层面引入IOC容器。IOC容器犹如一把钥匙,为我们打开了业务工程化的大门,允许我们探索更多工程化方面的设计和能力。
在Vue3中如何为路由Query参数标注类型 在Vue3中如何为路由Query参数标注类型 在Vue3中如何为路由Query参数标注类型
数据结构 顺序与链式二叉树的原理与实现(万字)
目录一、树概念及结构树的概念树的相关概念树的表示二、二叉树概念及结构概念特殊的二叉树二叉树的性质二叉树的存储结构三、二叉树的顺序结构及实现二叉树的顺序结构堆的概念及结构堆的实现堆向下调整算法堆的创建建堆时间复杂度堆的插入堆的删除堆的代码实现Heap.hHeap.c堆的应用堆排序堆排序代码实现Heap
数据结构 顺序与链式二叉树的原理与实现(万字) 数据结构 顺序与链式二叉树的原理与实现(万字) 数据结构 顺序与链式二叉树的原理与实现(万字)
算法·理论:Manacher 笔记
\(\text{Manacher}\) 来啦! \(\text{Manacher}\) 并没有什么前置知识,比 \(\text{KMP}\) 简单多了。 前置处理 \(\text{Manacher}\) 算法用于解决回文串相关问题,先看几个基本概念:回文中心、回文半径,这些看字面意思就能猜到。 还有
【Playwright+Python】系列教程(七)使用Playwright进行API接口测试
playwright也是可以做接口测试的,但个人觉得还是没有requests库强大,但和selenium相比的话,略胜一筹,毕竟支持API登录,也就是说可以不用交互直接调用接口操作了。 怎么用 既然是API的测试了,那肯定就别搞UI自动化那套,搞什么浏览器交互,那叫啥API测试,纯属扯淡。 也不像有
【Playwright+Python】系列教程(七)使用Playwright进行API接口测试 【Playwright+Python】系列教程(七)使用Playwright进行API接口测试 【Playwright+Python】系列教程(七)使用Playwright进行API接口测试
.NET电子邮件高效处理解决方案
前言 在日常软件开发中,电子邮件处理是一个不可或缺的功能,无论是用户注册验证、通知推送还是日常的业务沟通,都离不开电子邮件的支持。今天大姚给大家分享2款.NET开源、高效、强大的.NET电子邮件处理库,这些库不仅简化了电子邮件的发送、接收和管理工作,还提供了丰富的功能和灵活的配置选项,以满足各种复杂
AI编程助手那些事儿
最近跟身边的程序员老杆子讨论需求时,惊奇的发现,他居然没使用AI编程助手。一时间有2个想法从大脑闪过,然后心里还带了一丝轻蔑。
AI编程助手那些事儿 AI编程助手那些事儿 AI编程助手那些事儿
随时随地与 LLMs 聊天的开源项目「GitHub 热点速览」
众所周知,本地运行 LLMs 需要下载模型(体积大),并且还比较吃硬件配置。近日 GitHub 推出了 GitHub Models 服务,让开发者可以在 GitHub 上免费测试 Llama、Phi 3、Mistral 和 GPT-4o 等大模型。但是,目前该服务仍处于公测阶段,类似早期的 Copi
随时随地与 LLMs 聊天的开源项目「GitHub 热点速览」 随时随地与 LLMs 聊天的开源项目「GitHub 热点速览」 随时随地与 LLMs 聊天的开源项目「GitHub 热点速览」
《最新出炉》系列初窥篇-Python+Playwright自动化测试-64 - Canvas和SVG元素推拽
1.简介 今天宏哥分享的在实际测试工作中很少遇到,比较生僻,如果突然遇到我们可能会脑大、懵逼,一时之间不知道怎么办?所以宏哥这里提供一种思路供大家学习和参考。 2.SVG简介 svg也是html5新增的一个标签,它跟canvas很相似。都可以实现绘图、动画。但是svg绘制出来的都是矢量图,不像can
《最新出炉》系列初窥篇-Python+Playwright自动化测试-64 - Canvas和SVG元素推拽 《最新出炉》系列初窥篇-Python+Playwright自动化测试-64 - Canvas和SVG元素推拽 《最新出炉》系列初窥篇-Python+Playwright自动化测试-64 - Canvas和SVG元素推拽