硒与无头铬

时间:2018-02-12 11:49:18

标签: javascript selenium headless

我的测试环境在桌面模式下与chrome驱动程序完美配合。我正在使用一些javascript注入(一切正常)f.e。:

public static void ForceFillInput(this Driver driver, string selector, string value)
        {
            var javaScriptExecutor = (IJavaScriptExecutor)driver.webDriver;
            javaScriptExecutor.ExecuteScript($"$(\"{selector}\").val(\"{value}\")");
        }

但是当我想以无头模式运行时

AddArguments("--headless")

它只会失败

"$ is not defined"

有人可以帮助我如何将js / jquery注入无头解决方案吗?

微米。

2 个答案:

答案 0 :(得分:0)

您的Javascript代码段使用了jQuery api。在现代Web开发中,我们将Javascript放在HTML页面的末尾,让浏览器最终加载javascript,这样静态资源(如图片/图像/文本内容)可以尽可能早地显示,这样可以改善用户体验。用户打开网站。

我认为您的网页还在最后加载了jQuery,尝试在ExecuteScript之前添加一些等待/休眠,以等待浏览器完全加载jQuery

答案 1 :(得分:0)

看起来在执行脚本时尚未创建JQuery的简写。

使用服务员等待JQuery并找到选择器:

public static void ForceFillInput(this Driver driver, string selector, string value)
{
    string JS_SET_VALUE = 
      "var e; return !!window.$ && (e = window.$(arguments[0])).length > 0 && (e.val(arguments[1]), true);";

    new WebDriverWait(driver, TimeSpan.FromSeconds(60))
      .until(ctx => (bool)((IJavaScriptExecutor)ctx).ExecuteScript(JS_SET_VALUE, selector, value));
}