Python Selenium UI自动化测试

1、自动化测试基础

1.1 自动化测试的定义

  • 将人为的测试行为转化为机器自动执行的过程

1.2 自动化测试的目的

  • 减少成本,提高测试效率
  • 减少人为因素对测试的影响

1.3 什么项目适合做自动化测试

  • 项目界面稳定
  • 需求明确
  • 项目周期长
  • 测试脚本可以重复使用
  • 需要频繁地进行回归测试

1.4 难点

  • 对比手工UI测试,UI自动化测试有如下的难点:

1)UI本身的变化性,要想达到和手工测试相同的覆盖率,单纯的UI自动化测试往往很难 证明自己的投资回报; 2)UI控件元素本身识别的复杂性;

3)UI自动化测试出现问题时,恢复到下一条测试case执行的场景是复杂的。因为出现 这种问题的意外,是非“预期”的;

2、搭建自动化测试环境

2.1 安装python

2.2 安装selenium

# 安装Selenium的最新版本

pip install selenium

# 安装Selenium指定版本

pip install selenium==2.53.0

2.3 下载webdriver驱动

以chrome浏览器为例

  • 查看chrome浏览器版本:在地址栏输入 chrome://version

  • chromedriver下载地址:http://chromedriver.storage.googleapis.com/index.html
  • 下载与浏览器版本对应的chrome driver
  • 将下载好的chrome driver 解压,并放至到Python安装路径的根目录 (安装路径随意一个都行)

2.4 第一个自动化测试脚本

  • 打开浏览器
  • 访问百度首页

from selenium import webdriver # 导入webdriver

d = webdriver.Chrome() # 创建浏览器对象,此方法需要提前将webdriver驱动添加到系统环境变量

d.get('https://www.baidu.com') # 调用get方法访问百度首页

d.close() # 关闭浏览器

3、webdriver API

3.1 浏览器操作

3.1.1 浏览器最大化

  • driver.maximize_window()

3.1.2 设置浏览器的宽和高

  • driver.set_window_size(480,800)

3.1.3 控制浏览器前进、后退

  • 前进: driver.forward()
  • 后退: driver.back()

3.1.4 关闭浏览器

  • 关闭当前窗口: driver.close()
  • 关闭浏览器: driver.quit()

3.1.5 浏览器刷新

  • driver.refresh()

3.1.6 获取当前URL

  • driver.current_url

3.1.7 获取当前title

  • driver.title

3.1.8 浏览器截图

  • driver.save_screenshot(图片路径)

--路径参数必填

--图片格式必须为png

3.2 元素定位

3.2.1 常见的属性

  • class:元素的类名
  • id:元素的唯一id
  • name:元素名,大部分情况唯一

3.2.2 八大元素定位方法

  • 元素定位和操作是自动化测试的核心部分
  • 一个元素就像一个人,有自己的特征(属性)
  • webdriver提供了一系列的元素定位方法,常用的有下面几种:
    • id:根据元素id值
    • name:根据元素name值
    • class name:根据元素class值
    • tag name:根据元素标签名字
    • link text:根据超链接的文本内容
    • partial link text:根据超链接的部分文本内容
    • xpath:根据xpath
    • css selector:通过css定位

xpath定位

语法

/ :从根节点选取(绝对路径)

// :从当前节点选取,不考虑节点的位置(相对路径)

.. :选取当前节点的父节点 搜索框的上两级父节点: //*[@id='kw']/../..

@ :选取属性

举例:

相对路径: //div[@class='entry-sider-panel']/section[@class='entry-sider-panel__bd']/div/div[1]

CSS定位
语法
#:选取id属性,#kw
.:选取class属性
[]:选取其他属性,如:[id='xx']

> :层级选取,如:#form>span>input

举例:div.entry-sider-panel>section.entry-sider-panel__bd>div>div:nth-child(1)

3.3 元素操作

3.3.1 输入内容

send_keys()

3.3.2 点击元素

click()

3.3.3 清空元素文本内容

clear()

3.3.4 获取元素文本

text

  • 返回的是字符串

3.3.5 获取元素尺寸

size

  • 返回的是字典

3.3.6 获取元素的属性值

get_attribute('属性值') --如id,class

4、设置等待时间

4.1 强制等待

sleep()

  • 需要先导包,import time

4.2 隐式等待

driver.implicitly_wait(秒)

  • 智能等待是在等待周期内一直等待元素是否出现,如果元素出现则继续,元素在等待周期内没有出现则报错
  • 推荐等待时间:10-30秒
  • 隐式等待只需设置一次就可以对整个脚本文件生效

4.3 显式等待

显式等待使WebdDriver等待某个条件成立时继续执行,否则在达到最大时长时抛出超时异常

示例代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("http://www.baidu.com") # 每隔 0.5s 检查一次(默认就是 0.5s), 最多等待 5 秒
element = WebDriverWait(driver, 5, 0.5).until( EC.visibility_of_element_located( (By.ID, "kw")
) )
element.send_keys('selenium')
driver.quit()

5、滚动条操作、下拉框操作

5.1 操作滚动条

注意:操作滚动天是通过js操作的,不是通过selenium操作的

方法一:

from selenium import webdriver

from time import sleep

driver = webdriver.Chrome()

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

driver.set_window_size(688,476)

sleep(1)

js = 'window.scrollTo(0,10000)' # 拖动到底部

driver.execute_script(js) # 执行js命令

sleep(1)

js2 = 'window.scrollTo(10000,0)' # 从左拖到右

driver.execute_script(js2)

sleep(1)

js3 = 'window.scrollTo(10000,10000)' # 拖到右下角

driver.execute_script(js3)

sleep(2)

driver.quit()

方法二(推荐):

target = self.element(self.locators['product_des']) # 定位到目标元素
self._driver.execute_script("arguments[0].scrollIntoView();", target) # 滚动条滑动到目标元素

5.2 操作下拉框

方法一:二次定位,先定位到下拉框,然后通过里面的值进行定位

方法二:通过select库进行操作

示例代码:

from selenium import webdriver
from time import sleep
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome()

driver.get('file:///C:/Users/Eccang/Desktop/test.html')
sleep(1)
# 方法一
# 二次定位
m = driver.find_element_by_id('abc') # 先定位到下拉框
# m.find_element_by_xpath("//*[@value='p1']").click() # 再定位一次选择里面的选项
# 方法二
Select(m).select_by_index(1) # 根据索引值选择
sleep(1)
Select(m).select_by_value('p2') # 根据值选择
sleep(1)
Select(m).select_by_visible_text('深圳') # 根据可见文本选择

6、多窗口处理、弹框处理

6.1 多窗口处理

根据窗口的handle值进行切换

获取当前窗口handle值:driver.current_window_handle

获取所有窗口handle值:driver.window_handles

根据handle值切换窗口:driver.switch_to.window(窗口handle值)

6.2 弹框处理

点击确定:driver.switch_to.alert.accept()

点击取消:driver.switch_to.alert.dismiss()

弹框中输入文本:driver.switch_to.alert.send_keys()

获取弹框中的文本内容:driver.switch_to.alert.text

7、框架切换、文件上传

7.1 框架切换

切换框架:driver.switch_to.frame(id/name)

返回默认框架:driver.switch_to.default_content()

7.2 文件上传

对于通过input标签实现的上传功能,可以将其看作是一个输入框,即通过 send_keys()指定本地文件路径的方式实现文件上传

对于非 input 标签实现的上传功能,我们可以通过模拟键盘敲击的方式实现,代码如下:

import win32com.client # 导入Windows API模块

driver.find_element_by_css_selector("#top .icon").click()
sh = win32com.client.Dispatch("WScript.shell")
time.sleep(3)
sh.Sendkeys("C:\\Users\Downloads\f89860fb73c0ba14c9b88845eb10b928.jpeg\n")

8、浏览器无头模式

chrome_options = Options() # 开发者模式,防止被各大网站识别出来用了selenium
chrome_options.add_argument('--headless') # 添加谷歌无头浏览器模式

driver=webdriver.Chrome(options=chrome_options) # 谷歌无头浏览器模式

9、单例模式

单例模式:单例模式就是确保一个类只有一个实例.当你希望整个系统中,某个类只有一个实例时,单例模式就派上了用场

由于在做web UI测试的时候需要浏览器对象,在实际写脚本的过程中可能会遇到只要调用一次webdriver就会生成一个浏览器对象,此时我们可以用到单例模式来处理(或者自己写一个判断语句也是可以处理的)。具体实现代码如下:

后续有时间会补充一些写自动化测试用例过程中需要用到的分层思想,已经一些测试用例、脚本关联、数据处理方面的东西。。。

 

 

Python Selenium UI自动化测试的更多相关文章

  1. Python+Selenium UI自动化测试环境搭建及使用

    一什么是Selenium ? Selenium 是一个浏览器自动化测试框架,它主要用于web应用程序的自动化测试,其主要特点如下:开源.免费:多平台.浏览器.多语言支持:对web页面有良好的支持:AP ...

  2. Selenium UI自动化测试 Selenium Automatic Testing

    https://www.cnblogs.com/sunada2005/archive/2013/12/22/3486314.html UI Automatic Testing 1. 什么样的项目适合自 ...

  3. python selenium web自动化测试完整项目实例

    问题: 好多想不到的地方,中间经历了一次重构,好蛋疼: xpath定位使用的不够熟练,好多定位问题,只能靠强制等待解决: 存在功能重复的方法,因为xpath定位不同,只能分开写,有时间可以继续优化: ...

  4. Python+Selenium学习--自动化测试模型

    前言 一个自动化测试框架就是一个集成体系,在这一体系中包含测试功能的函数库.测试数据源.测试对象识别标准,以及种可重用的模块.自动化测试框架在发展的过程中经历了几个阶段,模块驱动测试.数据驱动测试.对 ...

  5. Python&selenium&tesseract自动化测试随机码、验证码(Captcha)的OCR识别解决方案参考

    在自动化测试或者安全渗透测试中,Captcha验证码的问题经常困扰我们,还好现在OCR和AI逐渐发展起来,在这块解决上越来越支撑到位. 我推荐的几种方式,一种是对于简单的验证码,用开源的一些OCR图片 ...

  6. 配置Python+selenium+firefox自动化测试

    1.安装python.默认安装 2.安装pip.下载pip-1.5.4包,解压pip-1.5.4,放在C盘,进入pip目录-->键入命令:python setup.py install  再进入 ...

  7. python selenium+phantomJS自动化测试环境

    0x00配置phantomJS 1. 在windows平台下 此种方法是弹浏览器进行自动化测试的. 1.下载谷歌的驱动 https://chromedriver.storage.googleapis. ...

  8. python + selenium webdriver 自动化测试 之 环境异常处理 (持续更新)

    1.webdriver版本与浏览器版本不匹配,在执行的时候会抛出如下错误提示 selenium.common.exceptions.WebDriverException: Message: unkno ...

  9. python + selenium + unittest 自动化测试框架 -- 入门篇

    . 预置条件: 1. python已安装 2. pycharm已安装 3. selenium已安装 4. chrome.driver 驱动已下载 二.工程建立 1. New Project:建立自己的 ...

  10. Python+Selenium - Web自动化测试(一):环境搭建

    清单列表: Python 3x Selenium Chrome Pycharm 一.Python的安装: Python官网下载地址:https://www.python.org/ 1.  进入官网地址 ...

随机推荐

  1. 使用 diffusers 训练你自己的 ControlNet 🧨

    简介 ControlNet 这个神经网络模型使得用户可以通过施加额外条件,细粒度地控制扩散模型的生成过程.这一技术最初由 Adding Conditional Control to Text-to-I ...

  2. 在Kubernetes部署GitLab

    在Kubernetes部署GitLab 前置条件 已安装Helm工具已部署NFS自动创建PVC 使用HELM安装 [root@k8s-master01 ~]# helm repo add gitlab ...

  3. [Linux]./configure | make | make install的工作过程与原理

    经常使用的Linux编译/安装命令,有必要了解一下原理了. step1 ./configure 配置与编译前检查 通常由软件开发商编写一个检测程序(configure或config)来检测用户的操作环 ...

  4. [Java]变量及其初始化 与 类对象的初始化

    1 变量 1.1 变量的[定义] 1.2 变量的[作用域] 1.3 变量的[初始值] 1.4 补充:缓存变量 1.5 变量的[分类]与[未初始化情况] 2 类对象 2.1 类对象的初始化/构造过程 1 ...

  5. 关于微人事中POI导入文件到数据库的异常以及自己的一些技术心得

    前言 在近四个月的时间里面,我的微人事项目才逐渐接近尾声,在昨天的测试接口中出现了两次数组越界以及一次空指针异常,三处异常我都通过吊事bug根据项目实际情况解决了,但是在空指针异常那里还是带有疑问,起 ...

  6. Numpy数组乘法

    Numpy数组乘法 元素级乘法 numpy.multiply() 或 * : 数组对应位置元素相乘 import numpy as np # 一维数组 a = np.array([1, 2, 3, 4 ...

  7. 信息论之从熵、惊奇到交叉熵、KL散度和互信息

    一.熵(PRML) 考虑将A地观测的一个随机变量x,编码后传输到B地. 这个随机变量有8种可能的状态,每个状态都是等可能的.为了把x的值传给接收者,需要传输⼀个3⽐特的消息.注意,这个变量的熵由下式给 ...

  8. 谈一谈Python中的装饰器

    1.装饰器基础介绍 1.1 何为Python中的装饰器? Python中装饰器的定义以及用途: 装饰器是一种特殊的函数,它可以接受一个函数作为参数,并返回一个新的函数.装饰器可以用来修改或增强函数的行 ...

  9. c/c++零基础坐牢第一天

    c/c++从入门到入土(1) 开始时间2023-04-12 22:37:21 结束时间2023-04-13 00:02:26 前言:恭喜大家打开信息时代的大门,每个时代都有代表性的炫酷技能:原始时代的 ...

  10. DeFi4-稳定币

    稳定币--稳定 是一个相对的度量指标 波动性,收益率标准差 在一个时间段内最大跌幅 Fiat,例如: 欧元.英镑的波动率为6-12% (波动本身并不能反映价格的范围 稳定币 vs 锚定币 稳定币类型 ...