python+selenium3 +web自动化测试笔记

本文详细介绍了Selenium自动化测试的基本操作,包括元素定位、鼠标操作、警告框处理、JavaScript执行等实战技巧,还涉及到了单元测试框架unittest的使用和数据驱动测试的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

目录

零、学习进度进度记录

一、工具准备:

二、准备步骤

三、元素定位实战

1.单个元素定位实战

1)find_element_by_id定位

2)find_element_by_name定位

3)find_element_by_class_name定位

4)xpath定位👍👍👍

5)driver.find_elements_by_css_selector定位

2.多个元素定位

3.使用by类定位

4.使用javascript定位

1)document.getElementById()

2)document.getElementByClassName()

5.使用jQuery定位

四、下拉框实战

1.value属性定位

2.index属性定位

3.visible_text属性定位

4.元素二次定位

五、鼠标操作实战

六、元素等待实战

七、表单切换实战

八、窗口切换实战

九、警告框实战

十、JAVAscript实战

十一、unittest单元测试框架

十二、数据驱动测试实战

十三、发送邮件实战

十四、测试框架封装和脚本的分层设计

十五、自动化测试苦战应用实战

 

 

 


零、学习进度进度记录

一、工具准备:

  1. python
  2. pycharm
  3. selenium库
  4. chrome driver

二、准备步骤

1.E:\conda>pip install selenium //安装selenium库

2.pip show selenium //查看版本信息

3.驱动地址:http://chromedriver.stage.googleapis.com/index.html,配置好chrome driver后,在系统环境path添加浏览器驱动的路径

4.打开百度首页,鼠标操作步骤如下:1->2(doble click)->3

5.按住键盘F12,可以观察到百度文本框对应的元素,selenium工具通过识别这些属性来进行测试 :

  • 等号左边   元素的属性
  • 等号右边    属性值

<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">

6.简单测试:

from selenium import webdriver
driver = webdriver.Chrome()

若提示:PyCharm:ModuleNotFoundError: No module named 'selenium'

1.检查selenium模块是否安装成功:

1)打开cmd控制台,输入python,

2)输入from selenium import webdriver,

3)没报错,则说明成功安装selenium包。

C:\Users\Administrator>python
Python 3.8.3 (default, Jul  2 2020, 17:30:36) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from selenium import webdriver

2.检查pycharm是否将python路径设置错误

1)查看pycharm输出控制台处,第一行即为使用的python.exe的路径,

2)改为你需要的python.exe路径:所需要的指的是,运行路径下包含selenium所需模块(pip、selenium、setuptools模块)

  • 点击file
  • 点击setting
  • 点击Project:你所建立的工程
  • 点击Python interpreter,查看当前路径下模块,
  • 更换路径,查看更换后路径下模块

参考:https://www.cnblogs.com/zhuzhu1214/p/10027609.html

3)再次运行代码,运行成功

三、元素定位实战

1.单个元素定位实战

1)find_element_by_id定位

    需要ctrl+F或者选中目标域找到目标参数

from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
driver.find_element_by_id("kw").send_keys('小罗今天也要努力')

2)find_element_by_name定位

from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
driver.find_element_by_name("wd").send_keys('hello net')

3)find_element_by_class_name定位

from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
driver.find_element_by_class_name("s_ipt").send_keys('小罗加油哟')

4)xpath定位👍👍👍

XPath即为XML路径语言,它是一种用来确定XML文档中某部分位置的语言。工具查看目标元素的xpath地址,工具查看比较死板,不够灵活,有时候直接复制粘贴会定位不到。这个时候就需要自己手动的去写xpath了,

如图:

1.要定位的input这个标签,可以先找到它老爸的id=s_kw_wrap;

2.要是它老爸的属性也不是很明显,就找它爷爷id=form。

from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
#定位自己
driver.find_elements_by_xpath("//input[@name='wd']")[0].send_keys('223')
#定位父标签(失败?)
driver.find_elements_by_xpath("//span[@id='s_kw_wrap']/input")[0].send_keys('223')
#定位爷标签
driver.find_elements_by_xpath("//form[@id='form']/span/input")[0].send_keys('嘿嘿')
#使用两个属性(id和class)定位一个标签(input),增强元素唯一性
driver.find_elements_by_xpath("//input[@id='kw' and @class='s_ipt']")[0].send_keys('223')

XPath资料参考😝

【1】selenium使用元素定位

【2】Selenium 下拉框--我理解的使用方法

【3】小坑:‘list‘ object has no attribute ‘send_keys‘】错误解决方法

 

如:要获取csdn文章title文本框的Xpath:

获取Xpath路径方法:F12,选中代码,右键复制,选择Xpath或CSS,粘贴可得:         

//*[@id="txtTitle"]

5)driver.find_elements_by_css_selector定位

注意:该方法返回一个列表对象

#1.input标签下含属性id,id值为kw,在css定位中id简写用#表示
driver.find_elements_by_css_selector("input#kw")[0].send_keys('heiheihei')
#2.form标签下含属性id,id值为form。层级关系用>表示
driver.find_elements_by_css_selector("form#form>span>input")[0].send_keys('heiheihei')
#3.form标签下含属性id,id值为form。层级关系省略>,以空格表示
driver.find_elements_by_css_selector("form#form span input")[0].send_keys('heiheihei')

 

2.多个元素定位

如F12百度首页调试界面,整个页面中值为span id= s_kw_wrap的标签下 ,ctrl+f查找关键字“hidden”,含type属性值=hidden的元素有10个,

tag=driver.find_elements_by_tag_name('input')
for t in tag:
    if t.get_attribute('autocomplete')=='off':
        t.send_keys('一个中国')
#点击百度一下
        driver.find_element_by_id('su').click()

3.使用by类定位

from selenium import webdriver
#导入By类
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
driver.find_element(By.ID,'kw').send_keys('2020年11月26日')
driver.find_element(By.ID,'s-top-left').click()

4.使用javascript定位

1)document.getElementById()

from selenium import webdriver
import time as t
dr = webdriver.Chrome()
dr.get('https://www.jianshu.com')
# 登陆
# js_register = 'document.getElementById("sign_in").click();'
# 注册
# js_register = 'document.getElementById("sign_up").click();'
dr.execute_script(js_register)
print("网页标题:", dr.title)

注意:execute_script()方法用于调用js方法来执行Javascript脚本

运行结果:pycharm控制台交互端打印跳转前/后的网页标题,网页自动跳转至简书登陆/注册界面。

2)document.getElementByClassName()

在日常的网页源码中,我们基于元素的id去定位是最万无一失的,id在单个页面中是不会重复的。但是实际工作中,很多前端开发人员并未给每个元素都编写id属性。通常一段html代码如下,这个例子中,最外层的div就没有id属性,此时,可以基于class属性来定位元素。

  • 用js-Class定位简书界面的二维码,并执行单击操作:

from selenium import webdriver
import time as t
dr = webdriver.Chrome()
dr.get('https://www.jianshu.com')
print("网页标题1:", dr.title)
t.sleep(2)
#二维码区域的class属性值=qrcode
js_class='document.getElementsByClassName("qrcode")[0].click();'
dr.execute_script(js_class)
#用于测试上一步是否执行成功
print("网页标题2:", dr.title)

运行结果:pycharm控制台交互端打印跳转前/后的网页标题,网页自动跳转至二维码界面。

class元素定位参考文章https://www.cnblogs.com/new-june/p/9599331.html

  • 定位密码文本框 getElementsByTagName()
from selenium import webdriver
import time as t
dr = webdriver.Chrome()
dr.get('https://www.jianshu.com')
print("网页标题1:", dr.title)
js_password = 'document.getElementsByTagName("input")[1].value="password";'
dr.execute_script(js_password)
print("网页标题2:", dr.title)

5.使用jQuery定位

四、下拉框实战

1.value属性定位

 

2.index属性定位

3.visible_text属性定位

4.元素二次定位

五、鼠标操作实战

from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains

dr  = webdriver.Chrome()
dr.get('https://www.baidu.com')
sleep(1)
mouse = dr.find_element_by_link_text("更多")#按文本定位
print('ok')
ActionChains(dr).move_to_element(mouse).perform()#悬停
ActionChains(dr).context_click(mouse).perform()#右键单击
ActionChains(dr).click(mouse).perform()#左键单击
ActionChains(dr).double_click(mouse).perform()#左键双击

六、元素等待实战

from time import sleep
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
from selenium.webdriver.support import expected_conditions
dr = webdriver.Chrome()
dr.get("http://www.baidu.com")

# #强制等待
# sleep(5)
# dr.find_element_by_id('kw').send_keys('hihi')

# #隐式等待
# dr.implicitly_wait(30)#找到元素就操作了
# dr.find_element_by_id('kw').send_keys('双击一下')

#显示等待
WebDriverWait(dr, 15, 0.5).until(expected_conditions.title_contains("百度一下"))
print('ok')
dr.quit()

七、表单切换实战

八、窗口切换实战

from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains

dr  = webdriver.Chrome()
dr.get('https://www.baidu.com')
sleep(1)
mouse = dr.find_element_by_link_text("更多").click()


#鼠标操作
# ActionChains(dr).move_to_element(mouse).perform()#悬停
# ActionChains(dr).context_click(mouse).perform()#右键单击
# ActionChains(dr).click(mouse).perform()#左键单击
# ActionChains(dr).double_click(mouse).perform()#左键双击

#window_handles 用来获取所有窗口,并返回一个list对象,然后通过switch_to.window([index])方法来获取指定窗口,如windows(1)表示切换到第二个窗口

windows=dr.window_handles#获取所有窗口句柄
dr.switch_to.window(windows[-1])#切换至当前最新窗口
dr.find_element_by_id("kw").send_keys('AI识别')#在百度搜索栏输入文本“AI识别”
dr.find_element_by_id("su").click()#单击按钮“百度一下”
dr.find_element_by_link_text("资讯").click()#单击元素“资讯”
dr.switch_to.window(windows[0])#切换至第一个窗口
dr.find_element_by_link_text("更多").click()
dr.switch_to.window(windows[-1])#切换至最新窗口
dr.switch_to.window(windows[0])#切换至第2个窗口

九、警告框实战

测试中国航空首页无条件搜索,不输入任何值得情况下点击查询预定,弹出警告框,测试输出警告框文本值至控制台 。

  • 使用switch_to()方法接收警告框,此方法相当于单击警告框里的“确认”按钮
  • 使用
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.select import Select

dr = webdriver.Chrome()
dr.get('http://www.airchina.com.cn/?cid=PINZHUAN:20201027:PZH:baidu:CHN:001001')
dr.find_element_by_id('portalBtn').click()
alert = dr.switch_to.alert
print(alert.text)
alert.dismiss()#取消/拒绝警告框
alert.accept()#确认警告框

#这个警告框无论使用dissmiss()和accept()结果都一样,销毁警告框

十、JAVAscript实战

十一、unittest单元测试框架

请看我的博客:https://luoyiran.blog.csdn.net/article/details/113538053

具体函数学习,请看我的博客:https://luoyiran.blog.csdn.net/article/details/116485795

十二、数据驱动测试实战

十三、发送邮件实战

请查看我的博客:python 发送 SMTP邮件实战

十四、测试框架封装和脚本的分层设计

十五、自动化测试苦战应用实战

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值