我正致力于使用selenium创建自动化测试。目前我想在加载后在每个页面/帧中执行一些js代码,以便能够在js中调用一些测试函数。在页面加载后立即执行它并不是一件好事,我只想保证它会在每一页上执行。
为了解决这个问题,我编写了自己的WebDriver实现器,使用委托模式,在调用方法“get”之后添加执行js。我在更改当前帧的driver.switchTo()对象的所有方法中添加脚本执行的方式相同。
问题是在点击某些链接/执行某些js代码后页面重新加载的情况。很容易理解,在这种情况下我的脚本不会被执行。
有没有办法使用selenium WebDriver来覆盖这种行为?
任何想法或黑客都在喋喋不休。
答案 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。