貌似我以前说过不少界面自动化测试的坏话,哈哈。最近接触了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. oc与c语言的相互调用

    一:OC调用C语言 C语言的.h文件 // // TestPrint.h // TestDemo // // Created by Techsun on 14-8-12. // Copyright ( ...

  2. 关于python列表和元组的基本操作

    一.列表 列表是python中最常出现的一种数据存储形式,掌握列表的基本操作可以快速而有效的提高我们的代码书写效率.列表中存放的数据有如下基本操作:如增.删.改.查,掌握了这四个操作,就基本掌握了列表 ...

  3. 关于反射和JVM的整理

  4. 理解es6 中 arrow function的this

    箭头函数相当于定义时候,普通函数.bind(this)箭头函数根本没有自己的this,导致内部的this就是定义时候的外层代码块中的this.外层代码块中的this,则取决于执行时候环境上下文cont ...

  5. 干货|爱奇艺CDN巡检系统技术解析

    小结: 1. 中心处理系统 /1/将定制后的巡检任务拆分,通过配置与任务分发系统.CMDB*( configuration management database)将派发到边缘拨测系统/2/处理边缘拨 ...

  6. Create-React-App创建antd-mobile开发环境

    Facebook 官方推出Create-React-App脚手架,基本可以零配置搭建基于webpack的React开发环境,内置了热更新等功能. 详细文档可前往链接:Create-React-App文 ...

  7. linux 对MTD分区nand flash的烧写和读取

    使用mtd-utils工具实现对flash的升级分区的烧写yaffs2 yaffs2的格式是根据所使用的nandflash来制作的,不同的nandflash,得到的yaffs2是不一样的,具体可以参考 ...

  8. vi命令删除

    3.删除 x :删除当前光标位置的字符 X    :删除当前光标位置前的字符 dd :删除当前行

  9. windows下安装php reids扩展

    1.使用phpinfo()函数查看PHP的版本信息,这会决定扩展文件版本. 2.下载php_igbinary-1.2.1-5.5-ts-vc11-x64.zip,php_redis-2.2.5-5.6 ...

  10. Java面向对象——类,对象和方法

    1.类的概念 在生活中,说到类,可以联想到类别,同类,会想到一类人,一类事物等等.而这一类人或事物都是具有相同特征或特点和行为的,我们根据不同的特征或特点和行为将他们归类或分类.同时,当我们认识一个新 ...