因为公司业务的需要,要在公司内部网上(jsp网站)系统中做大量的重复操作,之前也用过如“按键精灵”或“Auto_ACN"之类的自动操作软件。但是这些东西不但脚本编写困难(主要是对网页上特定原素的定位等)运行的时候还占用整台电脑,不能有任何干扰。也考虑过使用python 来直接模拟浏览器,自动构建表单数据发送来自动操作,但公司这个破网站,一大堆的frame 一大堆的javascript 跟踪了几次还是没有找出form的post地址和需要发送的表单数据。
终于,在学习自动测试的时候,发现了一个好东西 ---selenium python 这玩艺儿可以打开本机的一个浏览器(IE,FireFOX等都行)并通过编写python程度定位网页元素,操作表单,填写文字。一句话,人工能操作的,它都能模拟。
关于该软件的使用,就不在这边露丑了,网上一大堆(它还有一个Java版的)在stackoverflow 上好多问题都是问的Java版的问题,那些处理方法大多也能处理python版的。
现将使用中的一些问题处理记录一下:
1、光于网页中的框架跳转,跳转进一个子框架,要跳到另一个子框架(不是下属的)要先跳出来,再一步步跳进去。
2、关于在IE中若使用了javascript的”window.showModalDialog“打开的模拟对话框 selenium多数就不能找出来,也不能跳转到这个对话框中。可以使用如下方式在showModalDialog运行之前,注入一段Javascript 用 window.open 来替换,完了以后再通过注入改回来:
这是注入替换的语句
driver.execute_script("window.showModalDialog = window.open;")
这是完成后替换回来的语句
driver.execute_script("window.showModalDialog = window.showModalDialog;")
3、一定记住,driver是不随页面跳转自动从框架中跳出来,使用过switch_to.frame 命令的话,要记的driver不会自动从一个框架跳出来,那怛这个框架已被关闭(页面跳转关闭和使用close()及quit()关闭的都是)
4、网上有一些说window.open打开的模拟对话框,在使用driver.window_handles获最窗口句柄列表时是按打开顺序排的,但我在IE中的实际使用时窗口句柄列表似乎是按名句柄字符串的字母顺序排的。