貌似我以前说过不少界面自动化测试的坏话,哈哈。最近接触了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界面自动化测试的几个注意点的更多相关文章

  1. Robot Framework与Web界面自动化测试学习笔记:简单例子

    假设环境已经搭建好了.这里用RIDE( Robot Framework Test Data Editor)工具来编写用例.下面我们对Robot Framework简称rf. 我们先考虑下一个最基本的登 ...

  2. Robot Framework与Web界面自动化测试:简单例子

    假设环境已经搭建好了.这里用RIDE( Robot Framework Test Data Editor)工具来编写用例.下面我们对Robot Framework简称rf. 我们先考虑下一个最基本的登 ...

  3. 使用PhantomJS后台web界面截图

    自动化截web页面的图 一.工具介绍: PhantomJS是一个基于webkit的JavaScript API.它使用QtWebKit作为它核心浏览器的功能,使用webkit来编译解释执行JavaSc ...

  4. Robot Framework与Web界面自动化测试学习笔记:利用xpath定位元素

    在rf中,利用selinum2的关键字进行用例编写时,很多关键字的参数是html元素的定位标识. 最简单的方式,是通过id 或name来描述元素定位信息,如 click  button    id=l ...

  5. Robot Framework与Web界面自动化测试学习笔记:如何判断单选框的选中状态

    单选按钮是个常见的html元素,在网页中往往提供一组单选按钮来做选项. 这样在自动化测试用例中需要判断当前选中的按钮是否与预期的一直. 可以这样来操作: ${value}    Get Element ...

  6. Robot Framework与Web界面自动化测试学习笔记:定位到新窗口

    在页面操作中,有时会需要打开新的窗口(新的网页不在当前窗口显示,而是在新的tab页显示), 比如利用  window.open("newurl") 或者  <a href=& ...

  7. 使用phantomjs进行无界面UI自动化测试

    PhantomJS(http://phantomjs.org/) 是一个基于WebKit的服务器端JavaScript API.它全面支持web而不需浏览器支持,其快速.原生支持各种Web标准:DOM ...

  8. Robot Framework使用Phantomjs进行无界面UI自动化测试

    Robot Framework 是一款关键字驱动的验收自动化测试框架,现在在国内使用的越来越广泛了.一种通用的Web UI自动化测试解决方案是Robot Framework+Selenium2Libr ...

  9. 转载 基于Selenium WebDriver的Web应用自动化测试

    转载原地址:  https://www.ibm.com/developerworks/cn/web/1306_chenlei_webdriver/ 对于 Web 应用,软件测试人员在日常的测试工作中, ...

随机推荐

  1. Java常用类库 读书笔记 一

    1.String Buffer 类 String 类所表示的字符串有一个局限就是字符串常量一旦声明则不可改变,只有内存地址的指向可以改变,如果要频繁修改字符串,需要使用String Buffer 类. ...

  2. 使用Dubbo的SPI扩展机制实现自定义LoadBalance——方法二 不改源码添加META-INF/dubbo元数据

    一.官网提供的方法 参考官网 http://dubbo.apache.org/zh-cn/docs/dev/impls/load-balance.html 二.方法总结 在工程中创建类并实现LoadB ...

  3. 树状数组 || JZOI 1024. @szefany 的树

    题面:无 题解:无 代码: #include<cstdio> #include<cstring> #include<iostream> #include<al ...

  4. vs代码模板制作

    VS2008代码模板制作 一,类模板制作: 路径:C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplate ...

  5. JS判断字符串长度的5个方法(区分中文和英文)

    目的:计算字符串长度(英文占1个字符,中文汉字占2个字符) 方法一: 代码如下: String.prototype.gblen = function() {    var len = 0;    fo ...

  6. php中数组直接用加号相加array+array

    php中数组功能非常强大,甚至也可以直接通过+相加来合并数组. A数组 $a = ['a', 'b']; B数组 $b = ['c', 'd', 'e']; A+B结果 Array ( [0] =&g ...

  7. AIROBOT系统 之 私人存储 和 DLNA 智能电视云

    需求背景 工作多年之后发现有太多的电子资料到处存放.个人电脑是Mac,硬盘都不大,放不了太多东西.并且有时候想随时随地存放一些东西.所有就有了大家一个私有存储的需求 个人休息在家经常喜欢看电影电视剧, ...

  8. odoo定时发送邮件

    采购订单延迟或者存在部分到货的情况,定时发送邮件给相关人员 包含,采购订单明细,订单数量,已到货数量,未到货数量 <?xml version="1.0" encoding=& ...

  9. spring 相关注解详情(二)

    @Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法 /* 数据源的属性类 */ public class DataSourcePro ...

  10. elasticsearch安装head插件

    安装Head插件 由于head插件本质上还是一个nodejs的工程,因此需要安装node,使用npm来安装依赖的包. <1>安装Node.js 下载解压 wget https://node ...