除非启用Internet Explorer(F12)中的开发工具,否则有任何理由为什么Selenium测试应始终失败?
正在测试并定期执行Ajax调用的页面,因为没有进行任何调用。但是当我打开F12开发工具时,测试运行成功。
手动访问页面时,一切都按预期工作。我尝试过不同版本的IE WebDriver和MS Update for WebDriver。但没有任何帮助。我怀疑Selenium以某种方式拦截AJAX调用是一个问题。
以下是一个简单的HTML和Selenium测试,该测试因Internet Explorer 11和Selenium IEServerDriver 2.44.0而失败
<html>
<body>
<h1>Test</h1>
<div id="count">count placeholder</div>
<div id="thediv">div placeholder</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
var count = 1;
document.getElementById("thediv").innerHTML = "Test";
$(document).ready(function () {
doIt();
});
function doIt() {
$.ajax({url: "http://localhost:8000/my_app/counter", success: function (result) {
$("#thediv").html(result);
$("#count").html(count);
count++;
}});
setTimeout(function(){
doIt();
}, 1000);
}
</script>
</body>
</html>
测试:
@Test
public void runTest() throws Exception {
final InternetExplorerDriver internetExplorerDriver = new InternetExplorerDriver();
internetExplorerDriver.get("http://localhost:8000/test.html");
Assert.assertTrue(internetExplorerDriver.findElement(By.id("thediv")).getText().contains("1"));
Thread.sleep(5000);
Assert.assertTrue(Integer.parseInt(internetExplorerDriver.findElement(By.id("thediv")).getText()) > 1);
internetExplorerDriver.quit();
}
服务只返回一个数字,每次调用时它都会增加1。它将返回值设置为#thediv。此测试失败,因为未进行后续调用(第一个调用)。我使用了一个名为Fiddler的程序来检查这个。当使用开发工具(F12)运行此测试时,它可以正常工作,并且定期调用服务。第二个div #counter正在更新。
答案 0 :(得分:0)
问题是我们使用内容类型application / json发送数据,而Internet Explorer正在缓存结果。这就是它第一次工作的原因。由于某些原因,当开发工具处于打开状态(F12)时,IE会停止缓存结果。
解决方案是将HTTP标头添加到服务以防止缓存。示例如何in this question on SO。