我正在尝试通过C#中的webdriver执行javascript文件。以下是我到目前为止:
IJavaScriptExecutor js = driver as IJavaScriptExecutor;
(string)js.ExecuteScript("var s = window.document.createElement(\'script\'); s.src = \'E:\\workspace\\test\\jsPopup.js\'; window.document.head.appendChild(s); ");
js.ExecuteScript("return ourFunction");
jsfile.js的内容是
document.ourFunction = function(){ tabUrl = window.location.href;
imagesPath = chrome.extension.getURL("images");
var optionsPopupPath = chrome.extension.getURL("options.html");
}
然而,当我执行
时js.ExecuteScript("return ourFunction");
它抛出了找不到myFunction的例外。我想要做的是通过js注入或任何其他方法运行一个完整的javascript文件,让我访问js文件生成的数据。有帮助吗?
答案 0 :(得分:1)
这里有三个问题:
ourFunction()
,而不是ourFunction
,否则您将会遇到Uncaught ReferenceError: ourFunction is not defined(…)
ourFunction
已添加到document
而不是全局范围,因此您需要document.ourFunction()
,否则您将收到相同的错误。undefined
。如果您尝试返回'值'它,你会在浏览器中得到类似Uncaught SyntaxError: Illegal return statement(…)
的内容,或者可能会在代码中找到null
。您可以从浏览器控制台测试所有这些,而无需启动WebDriver。
如果您将方法更改为:
document.ourFunction = function(){ tabUrl = window.location.href;
imagesPath = chrome.extension.getURL("images");
var optionsPopupPath = chrome.extension.getURL("options.html");
return optionsPopupPath; // return here!
}
然后js.ExecuteScript("return document.ourFunction()");
应该有用。
<强>更新强>
(你可以尝试:js.ExecuteScript("return document.ourFunction();");
(添加分号),但这不应该有所作为。)
我建议(除了添加return
语句之外)暂时注释chrome.extension
行,以防这些行抛出错误并导致无法创建函数。我认为远是最可能的失败原因。
完成此操作后,这在Firefox和Chrome中对我来说没有任何明确或隐含的等待。