Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当开发工具打开(F12)时,IE11中的Selenium测试通过,否则将失败_Java_Ajax_Selenium_Selenium Webdriver_Internet Explorer 11 - Fatal编程技术网

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

Java 当开发工具打开(F12)时,IE11中的Selenium测试通过,否则将失败,java,ajax,selenium,selenium-webdriver,internet-explorer-11,Java,Ajax,Selenium,Selenium Webdriver,Internet Explorer 11,除非Internet Explorer(F12)中的开发工具打开,否则Selenium测试总是会失败,有什么原因吗 定期执行Ajax调用的页面正在测试中,但由于没有调用而失败。但当我打开F12开发工具时,测试成功运行 当手动访问页面时,一切都会按预期工作。我已经尝试过IE WebDriver的不同版本和针对WebDriver的MS更新。但没有任何帮助。我怀疑这是Selenium以某种方式拦截AJAX调用的问题 下面是一个简单的HTML和Selenium测试,在Internet Explorer

除非Internet Explorer(F12)中的开发工具打开,否则Selenium测试总是会失败,有什么原因吗

定期执行Ajax调用的页面正在测试中,但由于没有调用而失败。但当我打开F12开发工具时,测试成功运行

当手动访问页面时,一切都会按预期工作。我已经尝试过IE WebDriver的不同版本和针对WebDriver的MS更新。但没有任何帮助。我怀疑这是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>

该服务只返回一个数字,每次调用时它都会增加1。它将返回值设置为#thediv。此测试失败,因为没有进行后续调用(第一个调用为)。我用了一个叫做Fiddler的程序来检查这个。当使用(F12)上的开发工具运行此测试时,它会工作,并且会定期调用服务。第二个div#计数器正在更新中。问题是我们使用内容类型application/json发送数据,而Internet Explorer正在缓存结果。这就是为什么它只在第一次起作用。由于某些原因,当开发工具打开时(F12),IE停止缓存结果


解决方案是向服务添加HTTP头以防止缓存。示例如何做到这一点。

您使用的是Microsoft IE驱动程序实现,还是开源的?提示:如果您使用的是Java语言绑定,那么您使用的是开源实现,除非您跳过一些非常重要的障碍,包括修改绑定的源代码以处理当前Microsoft实现的怪癖。如果您使用的是开源实现,我可以自信地说,不会发生“AJAX调用拦截”。您需要提供更多信息,如代码示例和遇到的异常情况。@JimEvans我添加了一个简单的测试和失败的html。我还删除了例外部分,因为它们不相关。顺便说一句,我读了你的博客。我们使用的是开源软件。我们已经使用implementation=VENDOR尝试了从MS下载的驱动程序。这根本不起作用,它只会打开一个空白页,但我们可能做错了什么。
@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();
}