目录
1.先要打开浏览器,打不开,我们后面也就做不了,万事开头先有前提
概念:是一个用于web程序测试的工具,中文:晒
自己的理解:其实就是利用各种元素对网页程序进行操作,用自动操作替代了人的手工操作,如果对网页操作的情况下,手工和自动操作起来没什么区别的本质,建议还是手工操作,谁也不想写代码。
小伙伴们既然都开始做selenium了,自然PyCharm还有环境搭建,配置环境变量都已经下载好配置好了,这些我就不多讲了,要是这些还没弄好的话上b站上找找python安装视频,跟着来就行了。
第一步:创建好新项目,点击终端Terminal
第二步:在终端输入pip install selenium,点击回车就ok了

拓展知识:
删除selenium:pip uninstall selenium
查看selenium的版本以及其他信息:pip show selenium
这个非常重要,没有驱动的话就没有效果。
我自己理解的传输流程:selenium脚本写好传给浏览器驱动driver 一个请求,然后由driver给浏览器下达指令,浏览器就知道该干什么,浏览器执行完返回一个结果到driver,再由driver把结果传给python。
每个浏览器的驱动都不一样,并且驱动下载的版本一定要和浏览器的版本对应,下面是谷歌driver的下载地址,别的浏览器小伙伴们自己找吧
现在我这的最新版本是99,99后面的小数都是大版本里迭代的小版本

大部分小伙伴的电脑应该都是windows系统吧,那就选win32,64位的也选32,都是兼容的,不用的担心。
linux就选linux。Mac有两种,如果你的处理器为M1就选M1的,不是就选另一个

有两种使用驱动的方法
第一种:配置环境变量
鼠标右击我的电脑,点击属性------点击右侧的高级系统设置-----点击系统属性弹出框下面的环境变量----找到Path,用户变量和系统变量的Path都可以,把自己下好的驱动添加进去就行了。这样以后在python里用selenium就不用添加驱动了,既然配置了环境变量了,他就会帮我们在电脑里寻找驱动。
我用的是win10

第二种:觉得配置环境变量麻烦的可以直接把下载好的驱动文件复制到自己的项目文件下,随时可以拿来用

selenium基础的使用方法我几乎都会讲到,如果有遗漏的话请在评论区告诉我,谢谢咯。
我的注释里有解释,后面的的解释也有一大部分在注释里,理解一下。

find_element_by_id() —— 根据id获取元素,常用
find_element_by_xpath() ——根据xpath获取元素,常用。如果不知道xpath的值怎么写,找到元素右键,copy里就能复制xpath,太方便了
find_element_by_class_name() ——根据类名获取元素,常用
find_element_by_css_selector() ——根据选择器获取元素,class的前面要加.(英文的点),id的前面要加#(应该叫它井号吧)
find_element_by_name() ——根据那么获取元素
find_element_by_tag_name()——根据标签名获取,一般不用,一个网页中大部分标签都有重复的
find_element_by_link_text()——根据a标签的文本获取元素,文本必须一字不差
find_element_by_partial_link_text()——根据a标签的文本获取元素,文本可以模糊查询,例如:www.baidu.com的文本为百度,查询时写个百就可以了,会根据写的百自动查找
下面演示一遍怎么获取的,不常用的我就不演示了,学习吗,也不一定全学,要取之精华,去其糟怕。也不是糟粕,就是不常用而已。
上面我写的方法的写法已经被弃用了,我将用新的写法演示,为什么我用上面写的旧的写法呢,新的写法我觉得跟不上旧的写法直观,写博客吗,一定要先考虑小伙伴们看不看得懂,看不看的舒服为首要。虽然弃用了但是还可以用,只是运行时有警告而已,我是从开发转测试的,做开发时就容不得半点红色的东西,会开发的懂得都懂,就不多说了。


这里要讲一下,不经意出错的小地方。
第一个:百度一下按钮的类名其实是bg s_btn,bg后面是空格不是.(英文点),但是你要写到selenium中你就得去点空格换成.(英文点),这就是规矩。
第二个:复制qq空间链接xpath,粘贴的时候要放到双引号里面,xpath路径里所有的双引号都要换成单引号,这样才可以。
求生欲:这里我就写了三种方法,只是我自己比较常用的,是我自己!!!并不是大众承认的,我求生欲还是比较高的。
这个时候你脑子应该马上闪一下,很快就想到,不就是点击、输入等等这些操作。不错,这脑子没白闪一下,想对了。
操作的关键词:
click:点击
send_keys:输入
clear():清除全部
size:获取元素的大小
text:获取元素的文本内容
get_attribute():获取元素的属性值
is_displayed():判断元素是否可见
is_enabled():判断元素是否可用
常用的大家也都知道,浏览器吗无非就是点一点,输一输。
上实例:
大家觉着这样对吗,确实是点击了,是输入了,但总缺点东西啊。给你们30秒中想一想。很快吭,时间飞速流逝。
当然是缺元素了,大部分网页的输入框、按钮、链接,不只一个吧,你写成这样他怎么知道你要点哪个、输哪个,再说这代码本就是错的,sorry啊有点尴尬。

上正确实例:
也就是获取元素代码.后面的,一举两得

浏览器咋操作呢,浏览器顾名思义你得浏览,如果浏览器太小看不见,你得巨大化吧;浏览器卡了你得刷新吧;如果你女朋友查看你浏览器,你得马上关闭浏览器吧,要是我呢我直接删历史,但我怕我忘了我也不舍得删啊。
maximize_window:浏览器巨大化
set_window_size:设置浏览器页面的分辨率
set_window_position:设置浏览器的位置
back():后退
forward():前进
refresh():刷新
close():关闭当前页面
quite():关闭浏览器
title():获取当前页面的title
current_url():获取当前页面的url
还是一样拿出几个来举个栗子:


没鼠标没灵魂。
要想用鼠标操作先要实例化对象,运用ActionChains,导包

实例化对象

操作:
context_click:鼠标右击
double_click:双击
drag_and_drop:拖动
move_to_element():悬停
上实例操作:
最后一定要加上perform,不加的话不会执行。

因为点击的很快,显示的不明显,但看到新闻的条数到了从1-5变到了12-17,太快了,大家理解一下

没有一个好的键盘,游戏怎么能打出高超的技术呢
先导包

操作:
必须有:send_keys()
括号里:Keys.键盘按键
这里就写了俩常用的代表
(Keys.CONTROL,"引号里面就写英文字母了"):例如:复制(Keys.CONTROL,"c")
(Keys.BACKSPACE):删除,还有一个BACK_SPACE这俩一样
上实例:


下拉框,选择不止在表面
下拉框和下面警告框处理的网页是b站一个博主学习资料的网页
先导包

操作:
select_by_index:通过select标签下的option标签的索引定位,一般索引都从0开始
select_by_value:通过option的属性value来定位
select_by_visible_text:通过option的文本定位
上实例:
这种有下拉框的页面不大好找,但是要是想找的的话也不难,一些管理系统里就有很多。但这个我觉得不常用,所以了解一下就好了。


页面滚动,下面的内容可能更精彩
8-1.设置滚动的起始位置和滚动到的最终位置
winddow.scrollTo(起始位置,最终位置)
8-2.driver驱动通过execute_script下达指令 

都警告你了,你就不要再看了,懂得都懂。
9-1.想要处理警告框,先要选择它
alert=driver.switch_to.alert
9-2.利用创建的对象alert进行操作
send_keys:在警告框中写字
dismiss:取消警告框
accept:确定警告框
text:获取警告框的文本
上实例:


我最喜欢的一个操作,没学到这个的时候,登录输入框按和按钮就是获取不到,巨烦,一度让我认为它真是个小可爱。
有可能有些小伙伴找不到在浏览器控制台找不到frame标签。先选择输入框,输入框的元素代码出来了往上找找,有个iframe标签就是了。
切换frame:
driver.switch_to.frame(frame元素)
上实例,拿网易邮箱做例子。:
为了更直观的理解,先运行个没选择frame失败和选择frame的做对比。
很明显没有获取到,输入框name的属性

切换到frame:
我们的异常捕获还在,如果获取不到,肯定输出 "那应该是没选择frame了",显然没输出,那就获取到了,小伙伴们如果还不确定,下面的视频,用户名输入框里已自动填入****************


来回切换窗口,在摸鱼的边缘反复横跳。
11-1.我要是没说错的话,大部分或是所有页面应该都有一个a标签,a标签里都有一个target属性
它的值有四种:
我自己的理解:
_self:在当前窗口打开一个新的窗口,替代了前一个窗口
_blank:新建了一个窗口,前一个窗口还存在
下面两种我没打见过,上面俩种我比较常见,所以不大理解下俩种
W3C上的解释:
_top:在父框架集中打开被链接文档。
_parent:在整个窗口中打开被链接文档。
11-2.这次的窗口切换就是关于值为_blank的,在操作新窗口的时候必须先选择这个窗口,才能进行操作
获取窗口:
window_handle:获取所有的窗口名称
current_window_handle:获取单个窗口名称
选择窗口:
switch_to.window(窗口)
上实例:
还是网易邮箱为例,但是这次要从别的页面打开网易邮箱,使浏览器打开一个新的窗口
第一次还是先写一个没切换窗口的,看看能否获取新窗口的元素,好对比。
很明显控制台输出了"窗口没切换",看来没获取到

这次上切换窗口的实例:
控制台只输出了窗口名称,没有输出“窗口没切换”,证明获取到了。小伙伴不确定的话,下面视频到最后用户名输入框也输入了**********,证明确实新窗口的元素被获取到了。


这个相当简单,初入职场,截图快捷键还不知道是啥,你老板让你截图,你都不知道咋弄还得去开始程序里找,当场社si。现在都微信:ALT+a,QQ:CTRL+ALT+a的时代了
直接上代码,效果不是强,不上视频了
就一行代码,上面是截图,下面代码

cookie,干开发的应该懂得很多
我自己的理解:简单的来说,你在浏览器留下的信息,被存储下来了。举个例子:百度登录,你在浏览器登录百度,下次你再打开浏览器的时候,不用登陆,就已经登上了,因为你的cookie一直没有删掉。
第一步:浏览器控制台,点network

第二步:刷新一遍浏览器,往上找应该是第一个

在Headers里找Request Headers请求头,里面就有cookie,不是Response Headers响应头

上代码
注意:你取的cookie一定要使登录后的cookie


不容易终于到最后一个了--等待--为啥最后一个讲等待呢,因为对于等待我也不是很了解
三种等待方法:
强制等待:time.sleep(秒数),初学阶段最喜欢用的等待方法,导个包加个几秒等待旧ok了,相当简单,但是这种方法不稳定,不能准确保证代码能正常执。例如:打开一个网页一秒就够了,你设3秒,这是浪费时间;打开一个网页需要3秒,你设了1秒等待,就获取不到浏览器的元素,就无法进行下面的操作。
显示等待:导包还要导俩,这就很麻烦。我一直没理解这种等待,还是等评论区的大神教我吧
隐式等待:implicitly_wait(秒数)。他就是循环。列如你设置了10秒,每半秒重新查找一次,如果10秒内查找成功,那就往下执行了,如果超过10秒还没查找到,那就报错了。
如果大家这样看不舒服的话,我用xmind做了一个整理,就不用大家动手记笔记了。
百度云盘链接:https://pan.baidu.com/s/18ONAMj0tJHCtmCE1ygyVTA
提取码:ljh6
希望大家能给我提意见,多评论多点赞!!!
本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功
ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear
我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption
我将Cucumber与Ruby结合使用。通过Selenium-Webdriver在Chrome中运行测试时,我想将下载位置更改为测试文件夹而不是用户下载文件夹。我当前的chrome驱动程序是这样设置的:Capybara.default_driver=:seleniumCapybara.register_driver:seleniumdo|app|Capybara::Selenium::Driver.new(app,:browser=>:chrome,desired_capabilities:{'chromeOptions'=>{'args'=>%w{window-size=1920,1
我正在学习Ruby,遇到了inject。我正处于理解它的风口浪尖,但当我是那种需要真实世界的例子来学习一些东西的人时。我遇到的最常见的例子是人们使用inject来添加一个(1..10)范围的总和,我不太关心这个。这是一个任意的例子。在实际程序中我会用它做什么?我正在学习,所以我可以继续使用Rails,但我不必有一个以Web为中心的示例。我只需要一些我可以全神贯注的目标。谢谢大家。 最佳答案 inject有时可以通过它的“其他”名称reduce更好地理解。它是一个对Enumerable进行操作(迭代一次)并返回单个值的函数。它有许多有
我在尝试使用Faraday将文件上传到网络服务时遇到问题。我的代码:conn=Faraday.new('http://myapi')do|f|f.request:multipartendpayload={:file=>Faraday::UploadIO.new('...','image/jpeg')}conn.post('/',payload)尝试发布后似乎没有任何反应。当我检查响应时this是我所看到的:#:post,:body=>#,#,@opts={}>,#],@index=0>>,#>],@ios=[#,#,@opts={}>,#],@index=0>,#],@index=0>
我使用raise(ConfigurationError.new(msg))引发错误我试着用rspec测试一下:expect{Base.configuration.username}.toraise_error(ConfigurationError,message)但这行不通。我该如何测试呢?目标是匹配message。 最佳答案 您可以使用正则表达式匹配错误消息:it{expect{Foo.bar}.toraise_error(NoMethodError,/private/)}这将检查NoMethodError是否由privateme
(本文是网络的宏观的概念铺垫)目录计算机网络背景网络发展认识"协议"网络协议初识协议分层OSI七层模型TCP/IP五层(或四层)模型报头以太网碰撞路由器IP地址和MAC地址IP地址与MAC地址总结IP地址MAC地址计算机网络背景网络发展 是最开始先有的计算机,计算机后来因为多项技术的水平升高,逐渐的计算机变的小型化、高效化。后来因为计算机其本身的计算能力比较的快速:独立模式:计算机之间相互独立。 如:有三个人,每个人做的不同的事物,但是是需要协作的完成。 而这三个人所做的事是需要进行协作的,然而刚开始因为每一台计算机之间都是互相独立的。所以前面的人处理完了就需要将数据