selenium:结合httpwatch进行网页测试(Python版)

By | 12月04日
Advertisement

【概述】

Httpwatch 一款强大的网页数据分析工具。它可以捕捉http/https数据,查看底层的数据,包括headers、cookies、cache等。同时,记录发送请求、接收请的时间。Anyway,a good tool for you。
或许,你有一个需求,要在selenium进行页面功能测试的时候,你需要获取一些信息,如提交请求数据、接收请求数据、页面加载的时间等。selenium + httpwatch,将是一个不错的解决方案。本文主要介绍,将httpwatch附加到selenium webdriver的方法。

注意:
有关httpwatch的使用,请自行查看API文档:
http://apihelp.httpwatch.com/#Automation%20Overview.html

【selenium + httpwatch】

官方做法(JAVA版):

IWebDriver driver = <Create Selenium Driver using existing profile>; // Don't use new FirefoxDriver()

// Set a unique initial page title so that HttpWatch can attach to it
string uniqueTitle = Guid.NewGuid().ToString();
IJavaScriptExecutor js = driver as IJavaScriptExecutor;
js.ExecuteScript("document.title = '" + uniqueTitle + "';");

// Attach HttpWatch to the instance of the browser created through Selenium
Plugin plugin = control.AttachByTitle(uniqueTitle);
IWebDriver driver = <Create Selenium Driver using existing profile>; // Don't use new FirefoxDriver()

// Set a unique initial page title so that HttpWatch can attach to it
string uniqueTitle = Guid.NewGuid().ToString();
IJavaScriptExecutor js = driver as IJavaScriptExecutor;
js.ExecuteScript("document.title = '" + uniqueTitle + "';");

// Attach HttpWatch to the instance of the browser created through Selenium
Plugin plugin = control.AttachByTitle(uniqueTitle);
我就照模照样的写个Python版的

control = win32com.client.Dispatch('HttpWatch.Controller')
#driver=webdriver.Ie(executable_path="D:\\software\\IEDriverServer_Win32_2.28.0\\IEDriverServer.exe")
profile = webdriver.FirefoxProfile(r'C:\Users\X230\AppData\Roaming\Mozilla\Firefox\Profiles\68zb9g9a.default')
driver=webdriver.Firefox(firefox_profile=profile)
uniqueTitle = str(uuid.uuid4())
driver.get(url)
driver.execute_script('document.title = "' + uniqueTitle + '";')

plugin = control.AttachByTitle(uniqueTitle)
plugin.Log.EnableFilter(False)
plugin.Record()
#plugin.GotoURL(url)
plugin.Stop()
control = win32com.client.Dispatch('HttpWatch.Controller')
#driver=webdriver.Ie(executable_path="D:\\software\\IEDriverServer_Win32_2.28.0\\IEDriverServer.exe")
profile = webdriver.FirefoxProfile(r'C:\Users\X230\AppData\Roaming\Mozilla\Firefox\Profiles\68zb9g9a.default')
driver=webdriver.Firefox(firefox_profile=profile)
uniqueTitle = str(uuid.uuid4())
driver.get(url)
driver.execute_script('document.title = "' + uniqueTitle + '";')

plugin = control.AttachByTitle(uniqueTitle)
plugin.Log.EnableFilter(False)
plugin.Record()
#plugin.GotoURL(url)
plugin.Stop()
请留意官方版的第一句话(如下)。意思是,(如果使用Firefox)请不要使用默认的profile配置,需要使用Firefox本地profile配置。

IWebDriver driver = < Create Selenium Driver using existing profile >; // Don’t use new FirefoxDriver()
selenium Firefox 默认配置文件是webdriver_prefs.json,默认不加载所有的插件(add-ons)。所以,如果你忽略第一句,将发生以下报错:

plugin = self._control.AttachByTitle(uniqueTitle)
File "<COMObject HttpWatch.Controller>", line 2, in AttachByTitle
pywintypes.com_error: (-2147352567, '\xb7\xa2\xc9\xfa\xd2\xe2\xcd\xe2\xa1\xa3', (0, u'HttpWatch.Controller', u"AttachByTitle failed because no IE or Firefox page was found with the title 'd9f5f540-3227-4d8a-b928-daaf196e256b'. \r\n\r\nPlease check that HttpWatch is installed, enabled and working correctly in the target browser window. Also if you are using Selenium and Firefox make sure that you are using a copy of a profile that has HttpWatch enabled rather than a fresh profile created by 'new FirefoxDriver()'. For more information please refer to the Selenium/Firefox sample described in the HttpWatch Automation help - AttachByTitle failed", None, 0, -2147467259), None)
plugin = self._control.AttachByTitle(uniqueTitle)
File "<COMObject HttpWatch.Controller>", line 2, in AttachByTitle
pywintypes.com_error: (-2147352567, '\xb7\xa2\xc9\xfa\xd2\xe2\xcd\xe2\xa1\xa3', (0, u'HttpWatch.Controller', u"AttachByTitle failed because no IE or Firefox page was found with the title 'd9f5f540-3227-4d8a-b928-daaf196e256b'. \r\n\r\nPlease check that HttpWatch is installed, enabled and working correctly in the target browser window. Also if you are using Selenium and Firefox make sure that you are using a copy of a profile that has HttpWatch enabled rather than a fresh profile created by 'new FirefoxDriver()'. For more information please refer to the Selenium/Firefox sample described in the HttpWatch Automation help - AttachByTitle failed", None, 0, -2147467259), None)
那Firefox本地profile文件在哪,请查阅Firefox官方帮助:

https://support.mozilla.org/en-US/kb/profiles-where-firefox-stores-user-data
然后,如下初始化driver即可:

driver=webdriver.Firefox(firefox_profile=profile)

Similar Posts:

  • Python 版 APM 服务使用测试

    ## 后端开发与云服务 云服务这个词,大概最早是从云盘开始的,那时候概念也特别简单,无非就是把一些数据存在别人的服务器上,在"云存储"这个名词火起来之前,QQ 也有提供网站的功能用来存一些小东西(05年06年的样子,那时候大概只有几十 M 的空间),其实刚听到这个概念的时候我就很不理解,光存存东西不至于吹得这么玄乎吧.毕业后入行,云服务器才慢慢真真的丰富起来,从最开始的 VPS 变成云服务器.存储变成资源服务器.远程数据库等等,现在甚至有帮你防 DDOS 的服务(去年和今年貌似 DDO

  • 使用Firefox user agent进行移动端网页测试

    Selenium 真是个强大的网页测试工具,设置Firefox user agent, 就可以轻松模拟手机端浏览器进行网页测试. Demo Code # -*- coding:utf8 -*- import unittest from selenium import webdriver class MobileTestDemo(unittest.TestCase): def setUp(self): fp = webdriver.FirefoxProfile() fp.set_preferenc

  • 淘宝api自己的封装之python版

    #!/usr/bin/env python import datetime try : import json except ImportError : import simplejson as json import urllib, hashlib import base64 ENVIRONMENT = 'devel' # or product if ENVIRONMENT == 'devel' : AppKey = 'test' AppSecret = 'test' Gateway = 'h

  • python IDE比较与推荐 转载:水木社区- Python版

    转载:水木社区- Python版 发信人: RunningOn (挥着翅膀的男孩), 信区: Python 标 题: python IDE比较与推荐 发信站: 水木社区 (Mon Jul 16 19:34:58 2007), 转信 我先给一个初步的表格吧,大家如果有什么意见,或有补充,欢迎提出.有些我没有用过,先不写了. 以下是我使用过的python IDE: (更新与2010年1月20日) ┌─────┬────┬────┬──┬────┬──┬─────┬─────┐ │IDE name│自

  • 【教程】模拟登陆网站 之 Python版(内含两种版本的完整的可运行的代码)

    之前已经介绍过了网络相关的一些基础知识了: [整理]关于抓取网页,分析网页内容,模拟登陆网站的逻辑/流程和注意事项 以及,简单的网页内容抓取,用Python是如何实现的: [教程]抓取网并提取网页中所需要的信息 之 Python版 现在接着来介绍,如何通过Python来实现基本的模拟网站登陆的流程. 不过,此处需要介绍一下此文前提: 假定你已经看完了: [整理]关于抓取网页,分析网页内容,模拟登陆网站的逻辑/流程和注意事项 了解了基本的网络相关基本概念: 看完了: [总结]浏览器中的开发人员工具

  • 使用Selenium进行端到端测试

    使用Selenium进行端到端测试 Flask测试客户端不能完全模拟运行中的程序所在的环境,如果依赖运行在客户端浏览器中的JavaScript代码,任何程序都无法正常工作,因为响应发给测试的JavaScript代码无法像在真正的Web浏览器客户端中那样运行 如果测试需要完整的环境,除了使用真正的Web浏览器连接Web服务器中运行的程序外,别无他选,幸运的是,大多数浏览器都支持自动化操作,Selenium是一个Web浏览器自动化工具,支持3种主要操作系统中的大多数Web浏览器,Selenium的P

  • 小记最简单的socket服务器端和客户端的代码编写(C版和python版)

    C版: ////////////////////////////////////////////////server端 #include"winsock2.h" #include<stdio.h> #include<stdlib.h> #define DEFAULT_PORT 6789 #define DEFAULT_COUNT 25 #define DEFAULT_BUFFER 4096 int iPort = DEFAULT_PORT ; //port to

  • 查找获取百度网盘里的资料(python版)

    之前用php写了一个方法,感觉那个效果不是很好,学了python的正则之后,用写了一个python版的,大概功能差不多,只是,更加清楚了,这只是代码,正在学习pyqt,想写一个客户端 import re import urllib #关键字 qword=raw_input('input some word:') #返回结果的条数,好像得是10的倍数,或者小于10 rn=raw_input('input the number:') #分析百度参数得到的 url='http://www.baidu.

  • 我想搞个python版的http代理服务器出来

    http的代理服务器应该是使用最广的,基本上所有支持代理的东西都能用http的. 基于这一点,我真想弄个python版的出来-- 其实最主要一点,嘿嘿,我是想让一个WP的手机上网,朋友的,跟他换着用. 可是啊,我现在的水平实在是低,貌似不是那么好弄,于是我在找代码-- 找到这样一个页面:http://proxies.xhaus.com/python/ 确实五花八门的都有,可是啊,挨个试了一下,要么不稳定,要么根本不行,要么体积太大,唉

  • python版的读取声音文件到常量数组

    通常我们播放声音文件的时候会通过脚本读取所有的声音文件,然后放到数组里面,然后生成int型的索引,这样播放的时候就不直接传声音名字了, 而是这样playMusic( MUICS_BG_1 }, playSound( SE_DOG ); 这样无论声音格式如何变化,代码都无需改变. 之前都是Perl写的,这次为了和其他人保持一致改成python版的了,貌似没啥区别.贴代码备份 总目录media,下列 video, music, sound 三个目录,分别是视频,背景音和音效 #Auther: lan

Tags: