如何在C# Selenium的JavaScriptExecutor执行脚本中传入变量
C# Selenium 向JavaScriptExecutor传递变量的方法
错误原因
C#代码中定义的elementID、fieldValue属于C#运行上下文的变量,直接写在JavaScript脚本字符串中时,JS执行上下文无法识别这些未在JS作用域中声明的变量,因此会抛出变量未定义的错误。
正确实现方案
Selenium的ExecuteScript方法支持传入可变参数,所有额外传入的参数会按顺序映射到JS执行环境的arguments数组中,通过下标即可获取对应传入的值,示例代码如下:
var elementID = "text box1"; var fieldValue = "hello"; // 额外参数按顺序对应arguments[0]、arguments[1]... ((IJavaScriptExecutor)webdriver).ExecuteScript("document.getElementById(arguments[0]).value = arguments[1]", elementID, fieldValue);
补充说明
- 参数传递顺序和
arguments下标严格对应,第一个额外参数对应arguments[0],第二个对应arguments[1],以此类推 - 支持传入的参数类型包括字符串、数字、布尔值、Selenium的
IWebElement对象等,Selenium会自动完成跨上下文的类型转换 - 原生JS的DOM方法为
getElementById(末尾d为小写),部分浏览器对方法名大小写敏感,大写D的写法可能导致方法调用失败
内容的提问来源于stack exchange,提问作者SenatorUppercut
相关产品推荐
相关产品推荐

