我的测试环境在桌面模式下与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注入无头解决方案吗?
微米。
答案 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));
}