在网页前端自动化测试过程中,常常遇到各种各样的弹出窗口,这些窗口不仅包括浏览器新标签页的页面弹出窗口,还有如告警、确认式的js弹出窗口,以及文件上传时触发的windows弹出窗口等。这些弹出窗口的处理是前端自动化测试中不可或缺的一部分。
接下来,我们将简要了解这些弹出窗口的原理,并探讨使用Selenium和WebDriver的自动化处理方法,同时以Selenium IDE工具为例,说明其处理过程。
弹出窗口类型介绍
我们来说说页面弹出窗口。当用户点击某个链接时,可能会打开一个新的浏览器窗口,这个新窗口与之前的窗口是并列关系。进一步细分,页面弹出窗口可以分为模态弹出窗口和非模态弹出窗口。模态窗口会在弹出后成为当前活动窗口,并在该窗口关闭前,其父窗口无法成为活动窗口;而非模态窗口则允许父窗口继续保持活动状态。
Selenium+WebDriver自动化处理方法
在Selenium和WebDriver的自动化方法中,针对模态和非模态弹出窗口,常用的处理方式是保存父窗口和弹出窗口的标题、链接或句柄,然后使用标题或句柄在不同的窗口间进行切换。例如,WebDriver的title()和current_url()方法可以获取当前页面的标题和URL,再利用switch_to.window()方法进行窗口切换。
对于JavaScript弹出的alert、confirm、prompt等对话框,Selenium的处理方式略有不同。这些对话框由于不属于网页DOM树,因此无法通过浏览器或Selenium Driver的常规元素操作获取。针对这些对话框,Selenium主要借助于WebDriver的switch_to_alert()方法进行定位,并使用text、accept、dismiss或send_keys等方法进行操作。
至于文件上传时触发的windows弹出窗口,其处理方式则更为复杂。对于使用input标签实现的上传方式,可以通过Selenium+WebDriver的send_keys方法自动化上传文件路径。而对于非input标签上传方式,实现起来较为困难,通常需要借助于第三方库或工具。
Selenium IDE工具使用举例
使用Selenium IDE进行自动化测试时,可以轻松实现访问特定网址并触发弹出窗口的操作。例如,通过select window方法实现父、子窗口间的切换。对于js弹出的alert对话框,虽然Selenium IDE在定位后无法直接操作对话框,但可以通过导出测试脚本并添加相应的驱动方法来处理。
在处理文件上传的windows弹出窗口时,如果上传按钮是通过input标签实现的,那么可以使用Selenium IDE的type关键字定位input元素并输入文件路径。对于非input标签上传方式,Selenium IDE可能无法直接处理,需要借助其他工具或方法。
小总结