使用selenium做UI自动化测试,点击一个按钮后进入一个页面,该页面会使用一个地图服务,此时很难用页面资源去判断地图有没有加载成功或者加载时长是否太慢。即:要判断进入这个页面后,地图服务加载的接口响应时间不能超过10秒。
获取浏览器F12里的Network的数据,筛选出指定的url,获取相应的time做断言。
引入browsermob-proxy,一个浏览器代理,有点像Fiddler。在使用selenium操作元素时,能够知道调用了哪些接口。
2、 pip install browsermob-proxy
部分代码如下
import time
from browsermobproxy import Server
from selenium import webdriver
# 开启代理
BMPserver = Server(r'browsermob-proxy-2.1.4/bin/browsermob-proxy.bat')
BMPserver.start()
BMPproxy = BMPserver.create_proxy()
# 配置chrmodriver
chrome_options = Options()
chrome_options.add_argument('--ignore-certificate-errors')
chrome_options.add_argument('--proxy-server={}'.format(BMPproxy))
driver = webdriver.Chrome(options=chrome_options)
BMPproxy.new_har("video", options={'captureContent': True})
# 打开网址
driver.get(web_Url)
# 点击按钮
driver.find_element_by_xpath('//*[@id="search"]/div/div[2]/button').click()
# 为了能让资源能较为完整的加载,需要添加睡眠时间
time.sleep(10)
# 获取到的Network资源是json格式的,保存到文件中
json_data = BMPproxy.har
result_json = json.dumps(json_data, indent=4)
with open(setting.DIR_NAME + "/data/mapResponse.json", "w", errors="igone") as f:
f.write(result_json)
entry_data = json_data['log']['entries']
mapServer_url = '指定的接口url'
for t in entry_data:
if re.match(mapServer_url, t['request']['url']) is not None:
use_time = t['time']
pytest.assume(use_time < 1000) # 断言这个接口的响应时间不超过10秒