无头Chrome和document.location.href更改

时间:2019-05-13 07:49:05

标签: javascript java selenium selenium-chromedriver

我正在尝试自动执行页面上的搜索流程,这要求您登录才能访问搜索表单。我正在将chromedriver与具有以下配置的java一起使用:

    ChromeOptions chromeOptions = new ChromeOptions();
    chromeOptions.setHeadless(true);

    chromeOptions.addArguments("--disable-gpu");
    chromeOptions.addArguments("--disable-extensions");
    chromeOptions.setExperimentalOption("useAutomationExtension", false);
    chromeOptions.addArguments("--enable-javascript");
    chromeOptions.addArguments("--no-sandbox","--disable-dev-shm-usage'");

登录后,我可以通过在相关文本框中输入适当的数据来进行搜索。搜索结果页面上有一个按钮可返回到搜索查询页面,相关的按钮和js函数如下所示:

<input class="button" type="button" name="NAME" value="Search Again" onClick="somefunc('some_hash_params_etc')">
.....
function somefunc(url){document.location.href=url; }

但是在无头模式下,单击此按钮将最终显示在主页上,在该页面上再次要求我提供登录凭据。

对于相同的流程,非无头测试效果很好,每次单击按钮都会将我重定向到搜索表单,而不会强迫我重新登录。

我试图将url手动设置为发送给js函数的值,并尝试在代码中执行js,但是对于无头模式,结果是相同的,重定向回主页而不是搜索表单。 / p>

我应该在初始化Webdriver或无头模式时添加任何其他选项,这需要代码中的其他逻辑吗?

1 个答案:

答案 0 :(得分:1)

对于无头浏览器,您必须将窗口大小设置为在事件发生时触发。因为无头浏览器在没有窗口大小的情况下无法识别点击位置。请让我知道它是否有效。

ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("headless");
chromeOptions.addArguments("window-size=1920,1080");