用phantomjs进行web界面自动化测试的几个注意点
貌似我以前说过不少界面自动化测试的坏话,哈哈。最近接触了phantomjs,发现用它进行web界面测试也挺有意思的,下面举几个我使用过程中发现的注意点。
1、需要指定phantomjs位置,否则使用时会报错
driver = webdriver.PhantomJS(executable_path=r'D:\phantomjs-2.1.1-windows\bin\phantomjs.exe')#在windows中使用phatomjs,需要在这里指定可执行文件的位置,或者修改系统宏也行
2、需要指定虚拟窗口的分辨率,否则截图时可能会报错:Element is not currently visible and may not be manipulated exception。详细讨论看:https://github.com/ariya/phantomjs/issues/11637
driver.set_window_size(1024, 768)
3、需要修改源码service.py的send_remote_shutdown_command,否则driver.quit() 时会报错。详细讨论看:http://stackoverflow.com/questions/36153007/permission-error-if-to-use-phantomjs
def send_remote_shutdown_command(self):
try:
if self._cookie_temp_file:
os.remove(self._cookie_temp_file)
except Exception,info:
pass
4、有时候定位失败可能是因为网页还未加载完,可以加个sleep或者WebDriverWait试试
无论是web还是gui,界面测试最重要的就是定位控件,再进行操作。phantomjs提供的定位控件方法如下:
def find_element_by_id(self, id_):
def find_element_by_xpath(self, xpath):
def find_element_by_link_text(self, link_text):
def find_element_by_partial_link_text(self, link_text):
def find_element_by_name(self, name):
def find_element_by_tag_name(self, name):
def find_element_by_class_name(self, name):
def find_element_by_css_selector(self, css_selector):
还有一类是find_elements的,含义和上面的相同,只不过是寻找出目标网页中具有相同条件的一批控件罢了,这样就可以同时对多个控件进行同样的操作了。
说到操作,定位控件之后,接着就是对控件进行操作,常见的控件操作如下:
.click 点击
.send_keys 按键输入
.text 获取控件的文本
.get_attribute 获得控件指定的属性值
使用phantomjs时最好结合chrome的f12(dev_tool),这样对于不懂html的同学(如我)来说事半功倍。
最后,再举几个phantomjs的简单使用例子:
url = r'https://www.so.com/'
driver.get(url)
input_by_id = driver.find_element_by_id('input')
input_by_id.send_keys(u'测试find_element_by_id')
button_by_id = driver.find_element_by_id('search-button')
button_by_id.click()
time.sleep(1)
driver.save_screenshot('byid.png') url = r'https://www.so.com/'
driver.get(url)
input_by_name = driver.find_element_by_name('q')
input_by_name.send_keys(u'测试find_element_by_name')
button_by_class_name = driver.find_element_by_class_name('skin-search-button')
button_by_class_name.click()
time.sleep(1)
driver.save_screenshot('byname.png') url = r'https://www.so.com/'
driver.get(url)
input_by_class_name= driver.find_element_by_class_name('placeholder')
input_by_class_name.send_keys(u'测试find_element_by_class_name')
button_by_class_name = driver.find_element_by_class_name('skin-search-button')
button_by_class_name.click()
time.sleep(1)
driver.save_screenshot('byclassname.png') url = r'https://www.so.com/'
driver.get(url)
button_by_link_text = driver.find_element_by_link_text('问答')
button_by_link_text.click()
time.sleep(1)
driver.save_screenshot('bylinktext.png') url = r'https://www.so.com/'
driver.get(url)
button_by_partial_link_text = driver.find_element_by_partial_link_text('问')
button_by_partial_link_text.click()
time.sleep(1)
driver.save_screenshot('bypartiallinktext.png') url = r'https://www.so.com/'
driver.get(url)
input_by_xpath = driver.find_element_by_xpath('//*[@id="input"]')
input_by_xpath.send_keys(u'测试find_element_by_xpath')
button_by_id = driver.find_element_by_id('search-button')
button_by_id.click()
time.sleep(1)
driver.save_screenshot('byxpath.png') url = r'https://www.so.com/'
driver.get(url)
input_by_css_selector = driver.find_element_by_css_selector('#input')
input_by_css_selector.send_keys(u'测试find_element_by_css_selector')
button_by_id = driver.find_element_by_id('search-button')
button_by_id.click()
time.sleep(1)
driver.save_screenshot('bycssselector.png') url = r'https://www.so.com/'
driver.get(url)
input_by_tag_name = driver.find_elements_by_tag_name('input')#tag表示标签,当网页存在同标签名的控件时,一般用for进行定位比较好
for a in input_by_tag_name:
if a.get_attribute('type') == 'text':
a.send_keys(u'测试find_element_by_tag_name')
button_by_tag_name= driver.find_element_by_id('search-button')
button_by_tag_name.click()
time.sleep(1)
driver.save_screenshot('bytagname.png')
用phantomjs进行web界面自动化测试的几个注意点的更多相关文章
- Robot Framework与Web界面自动化测试学习笔记:简单例子
假设环境已经搭建好了.这里用RIDE( Robot Framework Test Data Editor)工具来编写用例.下面我们对Robot Framework简称rf. 我们先考虑下一个最基本的登 ...
- Robot Framework与Web界面自动化测试:简单例子
假设环境已经搭建好了.这里用RIDE( Robot Framework Test Data Editor)工具来编写用例.下面我们对Robot Framework简称rf. 我们先考虑下一个最基本的登 ...
- 使用PhantomJS后台web界面截图
自动化截web页面的图 一.工具介绍: PhantomJS是一个基于webkit的JavaScript API.它使用QtWebKit作为它核心浏览器的功能,使用webkit来编译解释执行JavaSc ...
- Robot Framework与Web界面自动化测试学习笔记:利用xpath定位元素
在rf中,利用selinum2的关键字进行用例编写时,很多关键字的参数是html元素的定位标识. 最简单的方式,是通过id 或name来描述元素定位信息,如 click button id=l ...
- Robot Framework与Web界面自动化测试学习笔记:如何判断单选框的选中状态
单选按钮是个常见的html元素,在网页中往往提供一组单选按钮来做选项. 这样在自动化测试用例中需要判断当前选中的按钮是否与预期的一直. 可以这样来操作: ${value} Get Element ...
- Robot Framework与Web界面自动化测试学习笔记:定位到新窗口
在页面操作中,有时会需要打开新的窗口(新的网页不在当前窗口显示,而是在新的tab页显示), 比如利用 window.open("newurl") 或者 <a href=& ...
- 使用phantomjs进行无界面UI自动化测试
PhantomJS(http://phantomjs.org/) 是一个基于WebKit的服务器端JavaScript API.它全面支持web而不需浏览器支持,其快速.原生支持各种Web标准:DOM ...
- Robot Framework使用Phantomjs进行无界面UI自动化测试
Robot Framework 是一款关键字驱动的验收自动化测试框架,现在在国内使用的越来越广泛了.一种通用的Web UI自动化测试解决方案是Robot Framework+Selenium2Libr ...
- 转载 基于Selenium WebDriver的Web应用自动化测试
转载原地址: https://www.ibm.com/developerworks/cn/web/1306_chenlei_webdriver/ 对于 Web 应用,软件测试人员在日常的测试工作中, ...
随机推荐
- python菜鸟学习心得
禁忌:学习没精力,就是没精打采.没有热情. 禁忌:学习一半,然后,放在一边. 禁忌:不要东一榔头,西一棒锤. 禁忌:学习要用心. 激情是动力,专注是效率 每次学习都是绕着网络转了一圈.还是要一步一个脚 ...
- vue中router.go、router.push和router.replace的区别
router.go(n) 这个方法的参数是一个整数,意思是在history记录中向前或者后退多少,类似window.history.go(n) router.push(location) 想要导航到不 ...
- oo第二单元作业总结
oo第二单元博客总结 在第一单元求导结束后,迎来了第二单元的多线程电梯的问题,在本单元前两次作业中个人主要应用两个线程,采用“生产者-消费者”模式和共享数据变量的方式解决问题.在第三次作业中加入多个电 ...
- Ztree节点增加删除修改和Icheck的用法
简介 官方文档:http://www.treejs.cn/v3/api.php zTree 是一个依靠 jQuery 实现的多功能 “树插件”, 而且拥有较好的浏览器兼容性,有着丰富的功能以及可以自定 ...
- 【LeetCode每天一题】Add Binary(二进制加法)
Given two binary strings, return their sum (also a binary string).The input strings are both non-emp ...
- 个人对stm32ADC编程关键点的理解
平时在做项目或者参加比赛的过程中,个人觉得,有些东西写出来可能会帮助到新手少走弯路.(也很可能是错误的,欢迎大家纠错) 如果只是采集一路信号,直接用ADC独立模式,单通道就可以了. 如果需要同时采集多 ...
- .htaccess实现php网站伪静态
伪静态是啥?很简单,就是假的静态网页...例如有个网页是:www.xxx.com/index.php?id=1这是动态网页,php后缀的如果改成:www.xxx.com/index-1.html那么这 ...
- java String补足
regionMatches()方法: equals 比较内容 == 比较的是地址
- 打开eclipse "Initializing Java Tooling"错误
问题:打开eclipse初始化界面过程中弹出An internal error occurred during: "Initializing Java Tooling". java ...
- vue+element-ui实现表格checkbox单选
公司平台利用vue+elementui搭建前端页面,因为本人第一次使用vue也遇到了不少坑,因为我要实现的效果如下图所示 实现这种单选框,只能选择一个,但element-ui展示的是多选框,check ...