第八课 Python自动化之selenium

news/2024/11/14 18:20:40/文章来源:https://www.cnblogs.com/weiyus1916/p/18546543

python+selenium

selenium是一个第三方库,python有很多库;

1、什么是ui自动化?

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

2、ui自动化的优点?

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

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

(3)减少冒烟测试,回归测试的人力成本,节省时间,提高测试效率

3、ui自动化缺点?

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

(2)用例的覆盖率少,占用例总数的15%-30%

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

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

都重要

原因:(1)功能测试是基础,在熟悉功能的前提下才能做好ui自动化


安装方法1:

1、安装selenium命令(在dos命令中cmd )

pip install selenium==3.141.0 (python3中pip.exe默认在python的Scripts路径下)

2、可使用以下命令查看是否安装成功:
pip list
3、直接把site--packages.rar包 selenium放进去
4、pycharm安装selenium


调用语句格式:

第一步:导入 from selenium import webdriver

第二步:创建一个driver对象来打开浏览器,对浏览器实现操作

driver = webdriver.Chrome( )

第三步:通过对象谷歌浏览器且输入网址,在用get方法来打开一个网站的url

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

打开页面方法:

方法一:格式 driver.get( " url")

场景1:driver.get("www.baidu.com")
方法二: 格式:driver.execute_script("window.open('url')")

场景1:driver.execute_script("window.open('http://www.jd.com')")
场景2:和场景1一样的
window='window.open("http://www.jd.com")'#可以通过变量来接收
driver.execute_script(window)#执行脚本

# from  selenium import webdriver  #导入selenium 模块中webdriver
# from time import *   #导入时间模块
# dx=webdriver.Chrome()  #创建一个对象来打开浏览器webdriver 接对应的浏览器
# dx.get("https://www.baidu.com/") #通过父对象中的get方法去打开网址
# sleep(2) #休眠2秒
# # dx.get("https://www.jd.com/")
# w="window.open('https://www.jd.com/')"  #重开窗口
# dx.execute_script(w)  #执行重开窗口脚本呢
# sleep(10)
# dx.close() #关闭当前窗口

拓展知识:
window.open()支持环境: JavaScript1.0+/JScript1.0+/Nav2+/IE3+/Opera3+
格式:window.open(pageURL,name,parameters)
pageURL 为子窗口路径 ,name 为子窗口句柄,parameters 为窗口参数(各参数用逗号分隔)


1、时间等待中的三种

1.1强制等待 sleep(xx) 例如:time.sleep(10)

1.2.隐性等待 implicitly_wait(xx) 例如:driver.implicitly_wait(10)

1.3.显性等待 WebDriverWait

# from  selenium import webdriver  #导入selenium 模块中webdriver
# from time import *   #导入时间模块
# dx=webdriver.Chrome()  #创建一个对象来打开浏览器webdriver 接对应的浏览器
# dx.get("https://www.baidu.com/") #通过父对象中的get方法去打开网址
# sleep(10) #强制等待
# # dx.implicitly_wait(10) #隐性等待
# print(1)

2、drivere.refresh( ) 页面刷新
案例:

from time import *   #导入时间模块
dx=webdriver.Chrome()  #创建一个对象来打开浏览器webdriver 接对应的浏览器
dx.get("https://www.baidu.com/") #通过父对象中的get方法去打开网址
sleep(3)
dx.refresh() #刷新

3、(1)driver.back( ) #返回上一页

from  selenium import webdriver  #导入selenium 模块中webdriver
from time import *   #导入时间模块
dx=webdriver.Chrome()  #创建一个对象来打开浏览器webdriver 接对应的浏览器
dx.get("https://www.baidu.com/") #通过父对象中的get方法去打开网址
sleep(3)
dx.get("https://www.jd.com/")
sleep(3)
dx.back()  # 返回上一页

(2)driver.forward( )#切换到下一页

from  selenium import webdriver  #导入selenium 模块中webdriver
from time import *   #导入时间模块
dx=webdriver.Chrome()  #创建一个对象来打开浏览器webdriver 接对应的浏览器
dx.get("https://www.baidu.com/") #通过父对象中的get方法去打开网址
sleep(3)
dx.get("https://www.jd.com/")
sleep(3)
dx.back()  # 返回上一页
sleep(3)

4、driver.set_window_size( 530,960) #设置指定窗口的大小

from  selenium import webdriver  #导入selenium 模块中webdriver
from time import *   #导入时间模块
dx=webdriver.Chrome()  #创建一个对象来打开浏览器webdriver 接对应的浏览器
dx.get("https://www.baidu.com/") #通过父对象中的get方法去打开网址
sleep(3)
dx.set_window_size(500,500)

5、driver.maxmize_window( ) #窗口最大化

from  selenium import webdriver  #导入selenium 模块中webdriver
from time import *   #导入时间模块
dx=webdriver.Chrome()  #创建一个对象来打开浏览器webdriver 接对应的浏览器
dx.get("https://www.baidu.com/") #通过父对象中的get方法去打开网址
sleep(3)
dx.maximize_window()

6、driver.get_screenshot_as_file(保存路径,图片名称) 截屏

from  selenium import webdriver  #导入selenium 模块中webdriver
from time import *   #导入时间模块
dx=webdriver.Chrome()  #创建一个对象来打开浏览器webdriver 接对应的浏览器
dx.get("https://www.baidu.com/") #通过父对象中的get方法去打开网址
sleep(3)
dx.get_screenshot_as_file(r"E:\ls\aa.png")

8、退出的两种方式:一种是close ,另一种:quit

from  selenium import webdriver  #导入selenium 模块中webdriver
from time import *   #导入时间模块
dx=webdriver.Chrome()  #创建一个对象来打开浏览器webdriver 接对应的浏览器
dx.get("https://www.baidu.com/") #通过父对象中的get方法去打开网址
sleep(3)
w="window.open('https://www.jd.com/')"  #重开窗口
dx.execute_script(w)  #执行重开窗口脚本呢
# dx.close() # 关闭当前窗口
dx.quit()

定位方法:

讲解实例
查看定位属性:
F12或者开发者工具查看页面元素

场景1:id 定位,比如定位百度的输入框

格式:driver.find_element_by_id('id值')

from selenium import webdriver
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.find_element_by_id("kw").send_keys("我是name定位")

场景2:name定位方法,比如百度输入框中找name

格式:driver.find_element_by_name("name值")

from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.find_element_by_name("wd")
time.sleep(3)
driver.find_element_by_name("wd").send_keys("杭州dcs")

场景3:class定位,以百度中class为例

格式:driver.find_element_by_class_name('class值')

from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.find_element_by_class_name('s_ipt').send_keys("class定位")  

场景4:link_text定位 #使用click()点击方法 准确的匹配 点击a标签

格式:driver.find_element_by_link_text('值').click()

from selenium import webdriver
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_link_text('hao123').click()  

场景5:partial_link_text 标签模糊定位

格式:driver.find_element_by_partial_link_text('模糊值').click() 

from selenium import webdriver
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_partial_link_text('ao').click()  

场景6:javascript 定位

格式:driver.execute_script('document.getElementById("id值").value="输入的值"')

from selenium import webdriver
from time import sleep
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
js ='document.getElementById("kw").value="js定位方法"'
driver.execute_script(js)  

拓展知识:(不讲解)

id定位:document.getElementById()
name定位:document.getElementsByName()
tag定位:document.getElementsByTagName()
class定位:document.getElementsByClassName()
css定位:document.querySelectorAll()

场景7:tag_naem定位(标签定位)

格式:drvier.find_elements_by_tag_name('input')

# from selenium import webdriver
# import time
# driver=webdriver.Chrome()
# driver.get("http://www.baidu.com")
inputs =drvier.find_elements_by_tag_name('input')
# # 通过elements来找到当前百度中所有的input标签
for i in inputs: #遍历input标签if i.get_attribute('name')=='wd':i.send_keys('多测师name') 

场景8:xpath定位 (详解)

格式:driver.find_element_by_xpath(xpath表达式)

两个定位:

1、绝对定位:

特点:1.以单斜杠/开头;2.从页面根元素(HTML标签)开始,严格按照元素在HTML页面中的位置和顺序向下查找

如:/html/body/div[2]/div[1]/div[5]/div/div/form/span[1]/input

2、相对定位:(我们一般都是用相对定位来定位的)

特点:1.以双斜杠//开头;2.不考虑元素在页面当中的绝对路径和位置;3.只考虑是否存在符合表达式的元素即可。

2.1使用标签名+节点属性定位

语法://标签名[@属性名=属性值]

# from selenium import webdriver
# from time import sleep #导入time模块引用sleep线程等待
# driver=webdriver.Chrome() #创建一个对象公司用谷歌那么就调用谷歌浏览器
# url='http://www.baidu.com' # 测试环境地址
# driver.get(url) #通过谷歌浏览器打开百度网站
# driver.maximize_window() #窗口最大化<br># sleep(2) #线程等待#直接复制的方法
xpath=drvier.find_element_by_xpath('//*[@id="kw"]')
xpath.send_keys('直接id复制是xpath')
# 直接手写且引用当前标签中已有的元素
# 引用:id 除了xpath元素中必须要添加单或者双引号其它都不需要
xpath =drvier.find_element_by_xpath('//*[@id="kw"]')
xpath.send_keys('直接id复制是xpath')
# 通过标签名称来
xpath =drvier.find_element_by_xpath('//input[@id="kw"]')
xpath.send_keys('通过input标签名')
# 通过name元素来实现
xpath =drvier.find_element_by_xpath('//*[@name="wd"]')
xpath.send_keys('xpath中name定位')
# 通过class元素来定位
xpath=drvier.find_element_by_xpath('//*[@class="s_ipt"]')
xpath.send_keys('xpath中class元素定位!')
# 通过:autocomplete="off"元素来定位
xpath=drvier.find_element_by_xpath('//*[@autocomplete="off"]')
xpath.send_keys('xpath中其他属性定位')
# 通过and来实现定位
xpath=drvier.find_element_by_xpath('//*[@name="wd" and @class="s_ipt"]')
xpath.send_keys('多个组合属性定位xpath')
#from://*[@id="form"]
#span://*[@id="form"]/span[1]
#   //*[@id="kw"] #'''xpath定位的写法'''
#找父级的方法(通过标签找到指定定位的元素)
#当前输入框的标签是:input标签-我要定位的地址在这个地址中输入文本
#input标签的上一级是:span标签
# # 当找父级无法找到的时候:找父级的爷爷级# xpath=driver.find_element_by_xpath('//*[@id="form"]/span/input')
# xpath.send_keys('根据层级查找定位')
#xpath=driver.find_element_by_xpath('//*[@id="form"]/span[1]/a[1]')
# xpath.send_keys('多测师!!!')
索引值从1开始,

场景9:css定位(详解)

格式:driver.find_element_by_css_selector('值')
9.1场景css中使用

from selenium import webdriver
from time import sleep #导入time模块引用sleep线程等待
driver=webdriver.Chrome() #创建一个对象公司用谷歌那么就调用谷歌浏览器
url='http://www.baidu.com' # 测试环境地址
driver.get(url) #通过谷歌浏览器打开百度网站
driver.maximize_window() #窗口最大化
sleep(2) #线程等待
from  selenium import webdriver  #导入selenium 模块中webdriver
from time import *   #导入时间模块
dx=webdriver.Chrome()  #创建一个对象来打开浏览器webdriver 接对应的浏览器
dx.get("https://www.baidu.com/") #通过父对象中的get方法去打开网址
sleep(3)
dx.maximize_window()
sleep(2)
dx.find_element_by_css_selector("#form>span>input").send_keys("层级定位上两级")
# dx.find_element_by_css_selector("#form > span.bg.s_ipt_wr.new-pmd.quickdelete-wrap>input").send_keys("层级上一级定位")
# dx.find_element_by_css_selector('[name="wd"][class="s_ipt"]').send_keys("css中的组合属性")
# dx.find_element_by_css_selector('[name="wd"]').send_keys("css中的name定位")
# dx.find_element_by_css_selector('[class="s_ipt"]').send_keys("css中的class全称定位")
# dx.find_element_by_css_selector(".s_ipt").send_keys("css中的class简写定位")
# dx.find_element_by_css_selector('[id="kw"]').send_keys("css中的id全称定位")
# dx.find_element_by_css_selector("#kw").send_keys("css中的id简写定位")

总结:
Python+Selenium 实现UI自动化元素定位总结
在这9种常用的定位方法中,优先顺序
1)有id优先使用id定位
2)没有id,考虑使用name或者class定位。
3)如果没有id,name,class再考虑用xpath,css定位。
4)如果是链接可以考虑使用link_text,partial_link_text 定位。
5)tag_name和JavaScript还是用的比较少的,我们根据实际情况,具体问题具体分析

拓展知识:(不讲解)

elements是复数,返回的是一个列表

0.id复数定位find_elements_by_id(self, id_)
1.name复数定位find_elements_by_name(self, name)
2.class复数定位find_elements_by_class_name(self, name)
3.tag复数定位find_elements_by_tag_name(self, name)
4.link复数定位find_elements_by_link_text(self, text)
5.partial_link复数定位find_elements_by_partial_link_text(self, link_text)
6.xpath复数定位find_elements_by_xpath(self, xpath)
7.css复数定位find_elements_by_css_selector(self, css_selector

方法一:driver.find_elements("css selector", ".mnav")[5].click()

方法二:driver.find_elements_by_class_name("mnav")[5].click()

注意从索引0开始

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

成功登陆cms案例(输入账号,输入密码,点击登陆)<br>from  selenium  import webdriver
from time  import  sleep
driver=webdriver.Chrome()
url="http://cms.duoceshi.cn/cms/manage/login.do"
driver.get(url)
sleep(3)
driver.find_element_by_id("userAccount").send_keys("admin")
sleep(3)
driver.find_element_by_id("loginPwd").send_keys("123456")
sleep(2)
driver.find_element_by_id("loginBtn").click()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/833538.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

png图片隐写实例之隐藏二维码

图片隐写,借助的是图片的每个像素点的RGB值,比如取RGB中的B值,这个值的二级制的最低位是0还是1,在肉眼上看看不出丝毫区别,我们就可以利用这个数据位,我们知道二维码一般都是两种颜色,黑色和白色,黑色的像素点用1表示,白色用0表示,我们就把二维码的每个像素点转换成1…

Windows环境安装Scrapy

虽然可以使用 pip 在 Windows 上安装 Scrapy,但还是建议用 Anaconda 安装教程 1.创建虚拟环境(可选但推荐) 打开 Anaconda Prompt,执行以下命令: conda create -n scrapy_env python=3.12(这里假设使用 Python 3.12,你可以根据需要选择其他版本)。 2.激活虚拟环境: co…

openssh 漏洞修复 openssl升级 OpenSSH_9.8p1麒麟系统

第一步:准备好要升级的包 下图所示 使用命令:yum install *.rpm或 rpm -ivh *rpm 如果使用 yum install *.rpm 安装不了,在使用 rpm -ivh *rpm 提示已有旧的版本 可以使用 rpm -Uvh *.rpm 可以替换安装,根据不通的系统 有可能安装后会重启不成功, 所以需要使用:sudo sy…

5.7 与 8.0 对相同文件的 LOAD DATA 语句结果不同

5.7 与 8.0 对相同文件的 LOAD DATA 语句结果不同 问题描述 某客户现场支持,由MySQL 5.7.21升级MySQL 8.0.25后,通过LOAD DATA导入文件,当同一会话连续导入不同的编码(UTF8/GB18030)文件时会出现乱码。数据库版本未升级之前,相同的导入操作在MySQL 5.7.21未出现乱码。 问…

用命令行启动 docker 报错:Redirecting to /bin/systemctl start docker.service 解决方法

docker安装成功后,用 sudo service docker start 启动docker报这个错误,看提示应该是需要用systemctl的命令。 使用systemctl start docker命令启动成功了,做下记录。 以下是启动doker常用的几个命令: # 启动 docker:systemctl start docker # 停止 docker:systemctl sto…

CCF - 网易雷火基金项目成果:基于大小模型协同的低资源标注技术|CNCC 2024 演讲实录

在科技蓬勃发展的时代浪潮中,人工智能领域的每一次突破都离不开持续的科研投入和对前沿技术的不懈探索。2023 年,网易伏羲与中国计算机学会(CCF)共同发起了 “CCF - 网易雷火联合基金”,致力于发挥和利用多方资源优势,加强与海内外青年学者的科研合作,促进中国人工智能等…

VisualVM 使用说明

VisualVM 简介:一个轻量级的Java进程监控软件 VisualVM 安装介绍(Mac 使用 brew 安装) ➜ ~ brew uninstall visualvm==> Uninstalling Cask visualvm ==> Backing App VisualVM.app up to /opt/homebrew/Caskroom/visualvm/2.1.10/VisualVM.app ==> Removing App /…

Java方法(四)

设计方法原则:本意为功能块,是实现某个功能语句块的结合,设计方法时保持原子性(一个方法完成一个功能)public class operator {public static void main(String[] args) {int sum = add(1,3);System.out.println(sum);}//加法public static int add(int a,int b){return a…

11.14,python之自动化

python+selenium selenium是一个第三方库,python有很多库; 1、什么是ui自动化? 通过模拟手工操作用户ui页面的方式,用代码去实现自动化操作和验证的行为。 2、ui自动化的优点? (1)解决重复性的功能测试和验证 (2)减少测试人员在回归测试时用例漏测和验证点的漏测 (3)…

快来验 踩CTH !!!

题目 别样的,验个数据验成这使样还怎么玩? 谁跟谁的都不一样

python自动化之selenium

python+selenium selenium是一个第三方库,python有很多库; 1、什么是ui自动化? 通过模拟手工操作用户ui页面的方式,用代码去实现自动化操作和验证的行为。 2、ui自动化的优点? (1)解决重复性的功能测试和验证 (2)减少测试人员在回归测试时用例漏测和验证点的漏测 (3)…