Products
GG网络技术分享 2025-03-18 16:10 0
在BAT里实习的时候,曾经封装过selenium做了一个自动化测试的工具。selenium是浏览器自动化测试领域常用的一个工具,支持Chrome,Firefox,Safari,IE和phantomjs等,能够像真正的用户一样操作浏览器。
它的应用主要在两个场景:
1)测试与浏览器的兼容性,比如要测试你的网页能否在不同的浏览器和操作系统上正常展示和运作。
2)测试系统功能,通过编写脚本来创建回归测试,检验待测服务的功能是否依旧正常。
对selenium不熟悉的人也许会说,前面几个浏览器我都听过用过,但是最后的这个phantomjs是什么呢。phantomjs是一个无页面的浏览器,由于无页面,也就说明它的定位并不是给用户来浏览网页查询资料的,而正由于无页面,它的并发量可以达到非常大的程度,一台标准配置的电脑,同时并发30个phantomjs线程是没有问题的(如果这台电脑打开30个Chrome窗口,估计电脑就卡死了,这就是phantomjs的优势)。
基本上可以认为它就是给selenium用来跑自动化测试专用高并发浏览器,不能给用户看到页面(除非调用截图动作,看截图),其他方面和Chrome没什么区别。
selenium可以通过操作WebDriver句柄来模拟用户操作,以下介绍几个常用的driver(WebDriver)对外开发操作页面的api):
driver.get(\\\"http://www.baidu.com/\\\") // get方法会一直等到页面加载,然后才会继续程序
data = driver.find_element_by_id(\'wrapper\')
.text
// 获取页面名为wraper的id标签的文本内容
driver.save_screenshot(\\\"baidu.png\\\") //生成页面快照并保存
driver.find_element_by_id(\'kw\').send_keys(u\'长城\') // id=\\\"kw\\\"是百度搜索输入框,输入字符串\\\"长城\\\"
driver.find_element_by_id(\'su\').click() //id=\\\"su\\\"是百度搜索按钮,click()是模拟点击
driver.find_element_by_id(\'kw\').send_keys(Keys.CONTROL, \'x\') //ctrl+x剪切输入框内容
driver.find_element_by_id(\'su\').send_keys(Keys.RETURN) time.sleep(5) //模拟Enter回车键
通过以上的api名称可以看出,在写代码的时候,需要实时的打开浏览器的调试功能(直接在当前页面按f12就行),根据元素的属性来使用合适的api(按完f12跳出的界面的Elements),如下图。
但是phantomjs在使用过程中,有一个坑,可能是很多用户都会遇到的,那就是iframe标签。
举例,现在要使用 WebElement we= driver.find_element_by_id(\'body\')语句拿到了一个大的页面元素,然后我需要拿到这个元素内部的一个子元素,但是如果这个子元素被包在一个iframe中,那么直接用find_element_by_id方法是无法找到这个元素的。
这个时候,就需要你再次使用f12,首先检查Element中是否真的存在iframe标签,以及这个iframe的id,然后用driver.switch_to_frame({id名})的方式把句柄切换到这个iframe内部,然后就可以继续用driver.find_element_by的方法拿到想要找的元素了。
当然,找完元素之后,别忘了switch_to.default_content(),跳出这个iframe。
以上是我的浅见,欢迎各位在下方评论区给我交流点赞。
我是苏苏思量,来自BAT的Java开发工程师,每日分享科技类见闻,欢迎关注我,与我共同进步。
Demand feedback