当前位置: 首页 > 知识库问答 >
问题:

通过WebDriver在C#中执行Javascript文件

龙俊德
2023-03-14

我正试图通过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");

共有1个答案

龙俊德
2023-03-14

这里有三个问题:

  1. 正如@crowcoder所指出的,您需要ourFunction(),而不是ourFunction,否则您将得到一个类似uncatted referenceerror的错误:ourFunction is not defined(…)
  2. 接下来,ourfunction被添加到document而不是全局范围,因此您需要document.ourfunction(),否则将得到相同的错误。
  3. 最后,函数不返回任何东西,因此执行它将返回undefined。如果您尝试返回它的'value',您将在浏览器中得到类似uncatted syntaxerror:非法返回语句(…)的内容,或者代码中可能返回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中工作很好,没有任何显式或隐式的等待。

 类似资料:
  • 问题内容: 如何实现的?在这里,它说的Java版本是: 但是我找不到C#代码来做到这一点。 问题答案: .NET语言绑定中的对象,方法和属性名称与Java绑定中的对象,方法和属性名称不完全对应。该项目的原则之一是,每种语言绑定都应该使那些习惯于该语言的人“感到自然”。在C#中,您想要执行JavaScript的代码如下

  • 问题内容: 我有一个sql脚本文件,我需要通过java执行其中的命令。我在互联网上搜索了相同的内容,得到了一些定义解析器的代码以拆分SQL语句并执行该代码。但是它们都不适合我的sql脚本文件。因为我的脚本文件同时包含create语句和alter语句,但不带分号[相反,它具有GO]有人可以建议一种执行脚本文件的解决方案吗?谢谢,Mahesh 问题答案: 对于简单的脚本,我通常使用ibatis- Sc

  • 问题内容: 我需要对CSV文件(以逗号分隔的文本文件)应用SQL查询。我的SQL是通过其他工具预定义的,无法更改。它可能在FROM部分中包含嵌入式选择和表别名。 对于我的任务,我发现了两个提供JDBC驱动程序 的开源 库(这是项目要求): CsvJdbc XlSQL JBoss Teiid 创建一个Apache Derby DB,将所有CSV加载为表格并执行查询。 这些是我遇到的问题: 它不接受S

  • 问题内容: 我有简单的搜寻器,可搜寻和搜寻页面。但是现在我有问题如何执行和解析该页面中的js链接。有谁知道如何解析和执行js页面吗? 例: some_url易于使用webhtmltoolktit进行解析 JAVASCRIPT:runmeat(1,7,0,2,7,9)是js链接,它随后重定向到some_url2页面,然后我需要对该页面进行爬网。但是问题是如何在C#中执行此javascript以获取s

  • 问题内容: 请告诉我,如何在C 代码中包含javascript头文件或javascript函数。 C 代码是用Linux(UBUNTU)编写的吗? 尽管我仅需要执行上述操作,但是由于我打算实现CTI(计算机电话集成)操作,因此请告诉我我的操作目的。 (将不胜感激)非常感谢 问题答案: 从C ++调用脚本函数 http://clipp.sourceforge.net/Tutorial/back_ca

  • 问题内容: 在不知道原因的情况下,脚本执行期间的测试速度非常慢。 这是我的脚本: 有什么建议可以使测试更快吗? 问题答案: 一个使脚本/程序更快的简单步骤是: 删除所有 ImplicitWait 实例为: 您正在广泛使用 WebDriverWait 即 显式等待 根据 显式和隐式等待 的文档: 警告 :请勿混合使用隐式和显式等待。这样做可能导致无法预测的等待时间。例如,将隐式等待设置为10秒,将显