用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')
作者:肥狐
出处:http://idbeta.cnblogs.com/
本博客内除了标题带[转]字样外的所有文章,均采用“署名-非商业性使用-禁止演绎 2.5 中国大陆”授权,任何违反本协议的行为均属于非法行为。如需非商业性转载,必须保留此段声明,且在文章页面明显位置给出原文连接。如需商业性转载出版,请直接和我联系。
如果您看了本篇博客,觉得对您有所收获,请点击右下方的【推荐】,同时欢迎您【关注我】
出处:http://idbeta.cnblogs.com/
本博客内除了标题带[转]字样外的所有文章,均采用“署名-非商业性使用-禁止演绎 2.5 中国大陆”授权,任何违反本协议的行为均属于非法行为。如需非商业性转载,必须保留此段声明,且在文章页面明显位置给出原文连接。如需商业性转载出版,请直接和我联系。
如果您看了本篇博客,觉得对您有所收获,请点击右下方的【推荐】,同时欢迎您【关注我】