当开发工具打开(F12)时,IE11中的Selenium测试通过,否则失败

时间:2014-11-18 05:33:15

标签: java ajax selenium selenium-webdriver internet-explorer-11

除非启用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正在更新。

1 个答案:

答案 0 :(得分:0)

问题是我们使用内容类型application / json发送数据,而Internet Explorer正在缓存结果。这就是它第一次工作的原因。由于某些原因,当开发工具处于打开状态(F12)时,IE会停止缓存结果。

解决方案是将HTTP标头添加到服务以防止缓存。示例如何in this question on SO