dcsxlh

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
统计
 

python+selenium

 

 

 

一、介绍自动化

1、什么是ui自动化?

ui 就是界面,

通过模拟手工操作用户页面方式,用代码来实现自动操作和验证行为。

2、ui自动化的优点?

(1)解决重复性的功能测试和验证

(2)减少测试人员在回归测试时用例漏测和验证点的漏测

(3)减少冒烟测试,减少回归测试人力成本

(4)节省时间,提高测试效率

 

3、ui 自动化的缺点?

(1)需求不稳定,比如:敏捷开发,速度快,ui频繁变更,定位不稳定,提高用例维护成本

(2)自动化用例的覆盖,占用例总数大搞20%-40%;

(3)场景覆盖占当前功能场景70%--80%;

4、ui自动化和功能测试那个重要?

都重要,先把功能测试测完,在进行ui自动化测试;

功能测试是ui自动化基础,先熟悉功能的前提下能做好UI自动化

 

5、ui自动化用来做什么?

ui自动化不是用来测试bug,用来回归和验证;

======================================

二、介绍selenium

(1)Selenium是一个应用于web应用程序的测试工具,支持多平台,多浏览器,多语言

去实现ui自动化测试;
(2)现在讲的Selenium版本其实是Selenium2版本

(3)Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包

括IE,Firefox,Safari,Google Chrome等
(4)selenium 是一套完整的web应用程序测试系统,包含了测试的录制(seleniumDE),编写及运行(Selenium Remote Control)和测试的并行处理(SeleniumGrid)
(5)selenium的优点?
1、工具免费
2、安装简单,小巧,selenium其实就是一个包
3、支持多语言(java,python)+selenium完成自动化测试
4、支持多平台(window,linux)
5、支持多浏览器 (ie,firefox,chrome)
6、Selenium2的核心是webdriver
(6)selenium原理;
webdriver是按照 client-server设计原理设计
client:简单来说就是我们写的代码,以http请求的方式发送给server端,server
端接收请求,执行相应操作,并返回给client端。
server:客户端的脚本启动后,被控制的浏览器就是server端,职责就是等待
client端发送请求并作出响应。 

================================================

三、安装

1、selenium是一个第三方库,python中有很多第三方库,

2、第三方库在哪里?

(1)C:\python37\Lib\site-packages

 

 

(2)pycharm===setting====项目中

 

 (3)下载方式:

方式1:pip  install   selenuim=3.141.0

 

 

方法二:

 

 

===========================================

1、下载谷歌浏览器:

(1)查看浏览器的版本

 

 

2、下载对应谷歌浏览器的谷歌驱动

(1)下载地址:http://chromedriver.storage.googleapis.com/index.html 

 

 (2)谷歌存放地址:

(1)地址1:C:\python37

 

 (2)C:\python37\Scripts

 

 

=-=========================================

案例:

from  selenium import  webdriver   #导入selenium 模块 在导入webdriver 模块
import time #导入时间模块
d=webdriver.Chrome() #创建一个d对象来打开浏览器,对浏览器实现操作,
d.get("https://www.baidu.com/") #通过对象谷歌浏览器,输入网址,通过get方法输入url 来打开网站
time.sleep(2) #休眠 2s
d.maximize_window() #窗口最大化
time.sleep(2) #休眠
d.find_element_by_id("kw").send_keys("多测师") #通过id定位,send_keys在输入内容

=-========================================
Selenium中元素定位方法 
要实现UI自动化,就必须学会定位web页面元素,Selenium核心
webdriver模块提供了9种定位元素方法 
定位方式                                  提供方法
id定位                    find_element_by_id()
name定位              find_element_by_name()
class定位               find_element_by_class_name()
link定位                  find_element_by_link_text()
partial link定位        find_element_by_partial_link_text()
JavaScript定位       document.getElementById("kw").value="duoceshi"
tag定位                   find_element_by_tag_name()
xpath定位               find_element_by_xpath()
css定位                  find_element_by_css_selector()
=============================================
实战:
1、打开网页,查看元素
(1)f12
(2)开发者工具

 

 

2、找到对的属性id,name,class 等

 

 

id定位                    find_element_by_id()
详解:
案例:
from  selenium import  webdriver
import time
d=webdriver.Chrome()
d.get("https://www.baidu.com/")
time.sleep(2)
d.find_element_by_id("kw").send_keys("id定位方法")
==============================================
name定位              find_element_by_name()
案例:
from  selenium import  webdriver
import time
d=webdriver.Chrome()
d.get("https://www.baidu.com/")
time.sleep(2)
d.find_element_by_name("wd").send_keys("name定位方法")
==============================================
 
class定位               find_element_by_class_name()
from  selenium import  webdriver
import time
d=webdriver.Chrome()
d.get("https://www.baidu.com/")
time.sleep(2)
d.find_element_by_class_name("s_ipt").send_keys(" class定位方法")
==============================================
link定位                  find_element_by_link_text()
 

 

 案例:

from  selenium import  webdriver
import time
d=webdriver.Chrome()
d.get("https://www.baidu.com/")
time.sleep(2)
d.find_element_by_link_text("hao123").click()

=-========================================
partial link定位        find_element_by_partial_link_text()
 
from  selenium import  webdriver
import time
d=webdriver.Chrome()
d.get("https://www.baidu.com/")
time.sleep(2)
d.find_element_by_partial_link_text("hao1").click()
 
=-========================================
JavaScript定位       document.getElementById("kw").value="duoceshi"

from  selenium import  webdriver
import time
d=webdriver.Chrome()
d.get("https://www.baidu.com/")
time.sleep(2)
js='document.getElementById("kw").value="js定位"'
d.execute_script(js)
=-========================================
 
 
tag定位                   find_element_by_tag_name()
 
from  selenium import  webdriver
import time
d=webdriver.Chrome()
d.get("https://www.baidu.com/")
time.sleep(2)
inputs=d.find_elements_by_tag_name("input")
for i in inputs:
if i.get_attribute("name")=="wd":
i.send_keys("tag定位")
 
===================================
xpath定位               find_element_by_xpath()
 
(1)点击属性右键====copy  xpth ====复制的内容      //*[@id="kw"]
from  selenium import  webdriver
import time
d=webdriver.Chrome()
d.get("https://www.baidu.com/")
time.sleep(2)
d.find_element_by_xpath('//*[@id="kw"]').send_keys("xpath定位")
(2)xpath详解
1、路径的区分:
 a .绝对路径
特点:
1),以单斜杠/开头,
2),从页面开始到元素,严格按照在html页面的位置和顺序向下找
场景:/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input
 
b.相对路径 
我们定位一般用的都是相对路径
特点:
1)以双斜杠//开头,
2)不考虑元素在页面中的绝对路径和位置
3)只考虑是否存在符合表达式的元素即可。
场景://*[@id="kw"]
解释:语法: //标签名 [ @属性名 =属性值]
// 表示相对路径,从匹配选择的当前节点选择文档中的节点,而不考虑他们的位置
. 选择当前节点
@匹配任何属性节点
*  表示匹配所有的属性
 
(1)
css中的id定位:
from  selenium import  webdriver
import time
d=webdriver.Chrome()
d.get("https://www.baidu.com/")
time.sleep(2)
d.find_element_by_xpath('//*[@id="kw"]').send_keys("xpath定位")
(2)css中的name定位:
from  selenium import  webdriver
import time
d=webdriver.Chrome()
d.get("https://www.baidu.com/")
time.sleep(2)
d.find_element_by_xpath("//*[@name='wd']").send_keys("css中的name定位")
 (3)xpath中的class定位:
from  selenium import  webdriver
import time
d=webdriver.Chrome()
d.get("https://www.baidu.com/")
time.sleep(2)
d.find_element_by_xpath("//*[@class='s_ipt']").send_keys("xpath中的class定位")

(4)xpath中的其他属性定位
from  selenium import  webdriver
import time
d=webdriver.Chrome()
d.get("https://www.baidu.com/")
time.sleep(2)
d.find_element_by_xpath("//*[@autocomplete='off']").send_keys("xpath中的其他属性定位")
(5)xpath中的组合属性定位
from  selenium import  webdriver
import time
d=webdriver.Chrome()
d.get("https://www.baidu.com/")
time.sleep(2)
d.find_element_by_xpath("//*[@autocomplete='off' and @class='s_ipt']").send_keys("xpath中的组合属性定位")
(6)层级定位
上上级://*[@id="form"]
上一级://*[@id="form"]/span[1]/input
本省://*[@id="kw"]
 
from  selenium import  webdriver
import time
d=webdriver.Chrome()
d.get("https://www.baidu.com/")
time.sleep(2)
d.find_element_by_xpath('//*[@id="form"]/span[1]/input').send_keys("层级定位")

===================================
css定位                  find_element_by_css_selector()
from  selenium import  webdriver
import time
d=webdriver.Chrome()
d.get("https://www.baidu.com/")
time.sleep(2)
d.find_element_by_css_selector('#kw').send_keys("css 定位")
 详解:
(1)css中id定位
a.css中id定位简写(#id)
案例:
from  selenium import  webdriver
import time
d=webdriver.Chrome()
d.get("https://www.baidu.com/")
time.sleep(2)
d.find_element_by_css_selector("#kw").send_keys("css定位简写")
 
b.css中id定位全称()
from  selenium import  webdriver
import time
d=webdriver.Chrome()
d.get("https://www.baidu.com/")
time.sleep(2)
d.find_element_by_css_selector('[id="kw"]').send_keys("id的全称定位")

2、css中的class定位
a.class简写定位
from  selenium import  webdriver
import time
d=webdriver.Chrome()
d.get("https://www.baidu.com/")
time.sleep(2)
d.find_element_by_css_selector('.s_ipt').send_keys("css中class简写定位")

b.claas 全称定位
from  selenium import  webdriver
import time
d=webdriver.Chrome()
d.get("https://www.baidu.com/")
time.sleep(2)
d.find_element_by_css_selector('[class="s_ipt"]').send_keys("css中class的全称定位")
(3)css中name定位:
from  selenium import  webdriver
import time
d=webdriver.Chrome()
d.get("https://www.baidu.com/")
time.sleep(2)
d.find_element_by_css_selector("[name='wd']").send_keys("css中的name定位")

(4)css中其他属性定位
from  selenium import  webdriver
import time
d=webdriver.Chrome()
d.get("https://www.baidu.com/")
time.sleep(2)
d.find_element_by_css_selector("[autocomplete='off']").send_keys("css中其他属性定位")
(5)css组合属性全称定位
from  selenium import  webdriver
import time
d=webdriver.Chrome()
d.get("https://www.baidu.com/")
time.sleep(2)
d.find_element_by_css_selector("[autocomplete='off'][id='kw']").send_keys("css中组合属性定位")
(6)层级定位
a.上上级定位
from  selenium import  webdriver
import time
d=webdriver.Chrome()
d.get("https://www.baidu.com/")
time.sleep(2)
d.find_element_by_css_selector('form>span>input').send_keys( "上上级定位")

b上级定位
from  selenium import  webdriver
import time
d=webdriver.Chrome()
d.get("https://www.baidu.com/")
time.sleep(2)
d.find_element_by_css_selector('span>input').send_keys( "上一级定位")


=-========================================
在这9种常用的定位方法中,优先顺序
1)有id优先使用id定位
2)没有id,考虑使用name或者class定位。
3)如果没有id,name,class再考虑用xpath,css定位。
4)如果是链接可以考虑使用link_text,partial_link_text 定位。
5)tag_name和JavaScript还是用的比较少的。
我们根据实际情况,具体问题具体分析
posted on   多测师_肖sir  阅读(382)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
 
点击右上角即可分享
微信分享提示