有没有办法在通过selenium加载后在所有页面中添加一些js?

时间:2012-05-23 12:02:41

标签: java javascript selenium webdriver

我正致力于使用selenium创建自动化测试。目前我想在加载后在每个页面/帧中执行一些js代码,以便能够在js中调用一些测试函数。在页面加载后立即执行它并不是一件好事,我只想保证它会在每一页上执行。

为了解决这个问题,我编写了自己的WebDriver实现器,使用委托模式,在调用方法“get”之后添加执行js。我在更改当前帧的driver.switchTo()对象的所有方法中添加脚本执行的方式相同。

问题是在点击某些链接/执行某些js代码后页面重新加载的情况。很容易理解,在这种情况下我的脚本不会被执行。

有没有办法使用selenium WebDriver来覆盖这种行为?

任何想法或黑客都在喋喋不休。

3 个答案:

答案 0 :(得分:1)

你可以让fiddler在后台运行代理所有HTTP方法.....在fiddler你可以添加一个自定义规则来改变服务器的响应(通过插入JS)来为每个特定类型的HTTP调用GET / POST(排除PNG / IMG等。)...我一直这样做......难以复制测试场景。

答案 1 :(得分:0)

我会在服务器端执行此操作:使用通用servlet扩展所有servlet,该servlet仅在Selenium运行时添加js代码(在selenium启动时在服务器上设置静态变量)

答案 2 :(得分:0)

我使用WebSocket做了类似的事情。在应用程序中创建WebSocket服务器。在初始get之后,execute_script打开与服务器的连接。当浏览器移动到新页面时,套接字连接将关闭 - 您可以再次执行execute_script。整个事情有点复杂,因为你需要检查任何iframe,如果失败则重试连接等。

我能够很好地使用Firefox,Chrome。也应该使用Edge / IE。