Hi,大家好,关注过我的应该知道前面其实是有写selenium的,为什么要重新写,因为前面写的不是特别的明白,有很多小伙伴私信我说没怎么看懂,所以,这里写这一系列的手把手教写。
我的微信是qing_an_an,公众号是Sea_Cha,有兴趣的可以加我一起学习,我也有一个学习群,群内都是刚刚学习的朋友,更有大佬的加持,分分钟教导
目录
5. 截屏:get_screenshot_as_file(保存路径)
让程序代替人为,自动化验证web项目功能的过程
为什么要自动化?
1. 解决回归测试(新版本正式测试之前的问题回归以及周边功能的验证)
2. 解决压力测试(多用户操作软件,统计软件服务器处理多用户请求的能力)
3. 解决兼容性测试(兼容不同的软件环境,如浏览器,操作系统,分辨率等)
4. 提高测试效率,保证产品质量
什么时候开始自动化测试?
功能测试完毕(手工测试)》》》web UI自动化
自动化测试的优缺点:
优点:
1. 较少的时间内运行更多的测试用例;
2. 自动化脚本可重复运行
3. 较少人为的错误;
4. 测试数据存储
缺点:
1. 不能取代手工测试;
2. 手工测试比自动化测试发现的缺陷更多;
3. 测试人员技能要求高
误区:
1. 自动化测试完全替代手工测试
2. 自动化测试一定比手工测试厉害
3. 自动化可以发现更多的bug
什么web项目适合做自动化测试?
1. 需求变动不频繁
2. 项目周期长
3. 项目需要回归测试
测试工具有哪些?
主流工具
1. web自动化测试:Selenium、Robot Framework
2. App自动化测试:Appium、MonkeyRunner、UIautomation
3. PC客户端自动化测试:QTP、WinRunner
4. 接口自动化测试:Jmeter、Postman、HttpUnit、RestClient、Python+requests
5. 云测平台:Testin、Testbird --》app兼容性测试
6. 性能测试:Jmeter、LoadRunner
特点:
1. 开源软件:源代码开放,可以根据需要来增加工具的某些功能;
2. 跨平台:Linux、Windows、MacOS
3. 核心功能:就是可以在多个浏览器上进行自动化测试,Chrome,Firefox,IE,Safari,opear
4. 多语言:java、python、C#、JavaScript、Ruby等
5. 成熟稳定:目前已被百度、腾讯等公司广泛使用
6. 功能强大:能够实现类似商业工具的大部分功能,因为开源,可实现定制化功能。
1. WebDriver是一种用于web应用程序的自动化测试工具;
2. 它提供了一套友好的API;
3. WebDriver完全就是一套类库,不依赖与任何测试框架,除了必要的浏览器驱动;
1. WebDriver API(基于Java、Python、C#等语言),对于java语言来说,就是下载下来的selenium的Jar包,比如 selenium-java-3.8.1.zip包,代表Selenium3.8.1的版本
2. 浏览器的驱动(browser driver),每个浏览器都有自己的驱动,均以exe文件形式存在比如谷歌的 chromedriver.exe、火狐的geckodriver.exe、IE的IEDriverServer.exe
3. 浏览器,浏览器当然就是我们很熟悉的常用的各种浏览器(IE、Firefox、Chrome)。
简单一点就是,有一把刀,它的作用就是削水果,也可以切菜等,这把刀相当于webDriver,你呢就是写代码的人,你想让它干嘛,切菜,削水果还是其他的,写一系列的代码,然后水果刀完成它要做的动作。
道理讲完了,我们也该进入正题了,一些简单的操作,也是非常实用的。
from selenium import webdriver
# 打开火狐浏览器
fox = webdriver.Chrome()
fox.get('https://baidu.com')
# 打开谷歌浏览器
gu = webdriver.Chrome()
gu.get('https://baidu.com')
其他的浏览器方法类似,通过实例化驱动,指定浏览器,打开百度网址。至于驱动,在这里之说下载自己浏览器所对应的版本的驱动即可。如果你浏览器版本是2.1.1,驱动没有的只有2.3.3也没关系,是兼容的,但是你不能下载比你浏览器版本低的驱动。
from selenium import webdriver
fox = webdriver.Chrome()
fox.get('https://baidu.com')
fox.refresh()
from selenium import webdriver
fox = webdriver.Chrome()
fox.get('https://baidu.com')
fox.forward()
from selenium import webdriver
fox = webdriver.Chrome()
fox.get('https://baidu.com')
fox.back()
注意:3、4这两个操作,只能在你浏览了其他页面的情况下才能使用,这里还没有讲到元素定位,所以这里先做了解,后续熟悉元素定位后,可自行操作
from selenium import webdriver
fox = webdriver.Chrome()
fox.get('https://baidu.com')
fox.get_screenshot_as_file('F:\MES\baidu.png')
from selenium import webdriver
fox = webdriver.Chrome()
fox.get('https://baidu.com')
fox.quit()
注意,这里两者是有区别的,quit是关闭打开浏览器中的所有窗口,而close是关闭当前窗口,所以,用的时候可别搞混了,搞混不得。
看看下面的例子,就明白了:
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('https://baidu.com')
js = "window.open('https://www.jd.com/')"
driver.execute_script(js)
driver.close()
这里我用js重新打开了一个窗口,然后用close的方法关闭一个窗口,此时,你会觉得关闭的是京东的窗口吧。其实不然,你错了哦。我没有切换窗口,所以关闭了还是第一次打开的窗口,也就是百度窗口。至于为什么要做窗口切换操作,这一点后续会有一章专门讲到。敬请期待吧。
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决
我有一个使用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
我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?
在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.
a=[3,4,7,8,3]b=[5,3,6,8,3]假设数组长度相同,是否有办法使用each或其他一些惯用方法从两个数组的每个元素中获取结果?不使用计数器?例如获取每个元素的乘积:[15,12,42,64,9](0..a.count-1).eachdo|i|太丑了...ruby1.9.3 最佳答案 使用Array.zip怎么样?:>>a=[3,4,7,8,3]=>[3,4,7,8,3]>>b=[5,3,6,8,3]=>[5,3,6,8,3]>>c=[]=>[]>>a.zip(b)do|i,j|c[[3,5],[4,3],[7,6],
我有一个非常简单的Controller来管理我的Rails应用程序中的静态页面:classPagesController我怎样才能让View模板返回它自己的名字,这样我就可以做这样的事情:#pricing.html.erb#-->"Pricing"感谢您的帮助。 最佳答案 4.3RoutingParametersTheparamshashwillalwayscontainthe:controllerand:actionkeys,butyoushouldusethemethodscontroller_nameandaction_nam
我将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
1、接口请求基本操作1.1例子tips在view的选项可以zoomin调整窗口字帖大小。1、创建一个测试的workspace,并命名为test2、test后面新增一个addrequest3、选择发送GET,URL为一个开源的https://api.apiopen.top/api/sentences获取每日一句4、点击send查看内容Tips:如果提示出现Error:tunnelingsocketcouldnotbeestablished,statusCode=407错误,参照以下解决办法)关于tunnelingsocketcouldnotbeestablished,cause=getaddri
Linux操作系统——网络配置与SSH远程安装完VMware与系统后,需要进行网络配置。第一个目标为进行SSH连接,可以从本机到VMware进行文件传送,首先需要进行网络配置。1.下载远程软件首先需要先下载安装一款远程软件:FinalShell或者xhell7FinalShellxhell7FinalShell下载:Windows下载http://www.hostbuf.com/downloads/finalshell_install.exemacOS下载http://www.hostbuf.com/downloads/finalshell_install.pkg2.配置CentOS网络安装好