上一期我们终于到了原始人阶段,虽然还是赤身裸体,以及还没有捕猎的工具,但是最起码我们可以称之为“人”,为什么呢因为我们有了自动化和手动测试结合的报告,我们的脚本有了“班长”,再也不是一盘散沙了,而且我们还有了基于unittest模块的漂亮的报告了!!而从这一期开始我们疯狂原始人终于有了工具,以及有了遮羞布^_^,我们的第一代工具就是:石器!
在进入介绍石器之前,我们还是先来总结一下近期工作的心路历程,还记得2018年1月1号微信上有一个用手机号码来预测2018的小程序:我的预测结果是“血拼的一年”,转眼2018年就要过去了,这一期也是51testing杂志2018年的最后一期,回首2018年对于自己真的是血拼的一年:做了一个自动化工具:需要控制三个之前都没听说过的仪器,其中一个是价值几百万的机械手臂=_=,且开发时间相当的紧张;每天都在惴惴不安,一个月期间几乎没有在夜里12点前睡过觉,经常干到凌晨一两点,第二天6点多起床*_*;五一假期期间还在每天看资料,想逻辑;还好,还好,一切虽然真的很不容易但是真的还算顺利:一个非常重要的原因哈哈有一个心脏很大颗的超人协助;虽然期间愤怒过,绝望过,也同时温暖着,满足着,开心着;罗胖的“得到”的吴伯凡老师说过:“痛快”即“痛”过后再“快乐”才是真正的快乐,越来越觉得这种“痛快”上瘾了,这样才会真的觉得自己是在活着;当然今年也升级了我们的自动化框架,期间也是“痛快”感觉十足,甚至哭过,骂过,争执过,但是同时也是满足着,开心着;非常开心,自己可以真的突破自己,真的可以透过现象看问题的本质,真的现在越来越可以控制自己的情绪,最起码在情绪上来的时候,我可以暂时用冷漠来控制它,让我在盛怒下,还可以正常思考:冷漠,有时比失控抓狂真的好太多,哈哈真的要到四十岁才能体会到中年人的淡然,虽然可以进步的空间还是很大。11月底还非常荣幸代表南京团队到总部汇报这一年的成果,这个过程也是“痛快”十足,PPT如何写,汇报如何在15分钟之内抓住老板们的注意力,以及说服老板,真的非常之“痛快”!2018年,真的配的上年初的预言:血拼的一年,每走一步都是一个血印*_*;不过2018年真的能实实在在感受到活着的一年,真的是收获满满!
好吧,心路历程总结完毕,我们真的可以开始介绍我们的工具,我们的工具是selenium:这个是测试网页的万能神奇!
1.我们先看一下selenium是什么?
1)它主要提供了网页自动化测试的解决方案,而且是开源的,很多公司都在使用,它的官网:http://docs.seleniumhq.org/
2. Selenium主要的作用:
1)通过自动化的方式测试Web中包含的一些应用
2)基于Web的一些重复的令人厌烦的管理任务也可以通过它实现自动化测试。
3)根据自己的需求进行一些客制化的开发。
4)它包含一套工具使web browser 可以实现自动化测试,这个测试是可以跨平台的测试
5)它可以被很多语言控制
3.Selenium支持的浏览器
Selenium与一些比较大的browser供应商是兼容的,这些browser的供应商已经设置了几个步骤目的是使Selenium作为一个browser本地部分。
对比其它的浏览器自动化测试工具和APIs和frameworks它是一个核心的技术。
它支持的Browser如下:Firefox, IE, Safari, Opera, Chrome
Selenium有一系列的工具可供选择,例如selenium IDE进行录制脚本我们这次主要用的是Selenium Web Driver它可以控制一个浏览器或者本地或远程控制浏览器。
4.Selenium-Web driver API命令和操作
下面介绍一下经常使用的一些API
1.)读取页面
第一件事就是你希望使用web driver来访问一个网页,通常的方法
是”get”即:driver. get(“http://www.google.com”)
为了避免在页面还未加载完毕就进行某些操作,可以使用Explicit或者
Implicit函数进行等待,等页面完全加载完毕,再进行一些动作的进
行。
2.)定位Web UI界面的元素(即Web Elements)
每个绑定中的语言都会有”Find Element”和”Find Elements”的方法。第一
个方法返回的WebElement对象,否则它会丢出一个异常。后面一个方法
返回的是WebElements的列表,如果没有匹配的列表,见返回一个空的列
表Find的方法获得一个定位器,或者询问的对象,在web driver中称find
为By它的方法如下:
By ID
这是一个最有效率和比较好的定位元素的方法,比较平常的问题是,元
素ID的名称不唯一,对于此Page中或者自动产生的ID,此两种情况
都被避免。建立一个在html 元素的类,是与自动产生ID对比而言是更
适合的方法。
element = driver.find_element_by_id("coolestWidgetEvah") or from selenium.webdriver.common.by import by element=driver.find_element(by=By.ID,value="coolestWidgetEvah”) |
By Class Name
这里的Class指的是DOM元素的属性。通常状况下很多DOM元素有
相同的Class name
因此发现多重的元素变得更有实际的意义,相比发现第一个element而
言。
cheeses = driver.find_elements_by_class_name ("cheese") or from selenium.webdriver.common.by import by cheeses = driver.find_elements(By.CLASS_NAME, "cheese") |
By Tag Name
返回的是这个元素的DOM标签姓名。
frame = driver.find_element_by_tag_name("iframe") or from selenium.webdriver.common.by import By frame = driver.find_element(By.TAG_NAME, "iframe") |
By Name
找到符合name属性的元素
cheese = driver.find_element_by_name("cheese") or from selenium.webdriver.common.by import By cheese = driver.find_element(By.NAME, "cheese") |
By Link Text
通过匹配可见的文本来找到Link元素
cheese = driver.find_element_by_link_text("cheese") or from selenium.webdriver.common.by import by cheese = driver.find_element(By.LINK_TEXT, "cheese") |
By Partial Link Text
通过部分匹配可见文本来找到link元素
cheese = driver.find_element_by_partial_link_text ("cheese") or from selenium.webdriver.common.by import by cheese = driver.find_element(By.PARTIAL_LINK_TEXT, "cheese") |
By CSS
连接姓名使用的定位策略是CSS, 如果Browser不支持CSS则会使用Sizzle.IE6,7和FF3.0目前使用Sizzle。
注意不是所有的Browser都支持CSS,即使是同一个Browser不同的版本也有可能某个版本支持CSS,某个版本不支持CSS。
cheese = driver.find_element_by_css_selector ("#food span.dairy.aged") or from selenium.webdriver.common.by import By cheese = driver.find_element(By.CSS_SELECTOR, "#food span.dairy.aged") |
By XPATH
在高层只要有可能Web Driver就会使用Browser本地的XPath能力。在那些本地没有Xpath支持的Browser,我们已经提供了我们自己的执行。这些可能导致一些不期望出现的行为出现。除非你已经了解不同的Xpath引擎有什么不同。
此函数较复杂不建议使用它。只有在实在没有办法了再考虑用这个函数。
......
查看更多精彩内容,请点击下载:
版权声明:本文出自《51测试天地》第五十二期。51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。