javascript - 未定义包括外部文件“signalr.min.js”窗口
问题描述
版本
- 开放测试——版本 1.2.2
- ChromeDriver 85.0.4183.87
包括我需要的外部javascript文件总是会抛出类似的东西:
Caused by: java.lang.RuntimeException: Failed to evaluate JavaScript code at line number 1. The script content was:
$include(["signalr.min.js", "signalr.tests.js"]);
...
Caused by: java.lang.RuntimeException: Failed to run script file signalr.min.js
...
Caused by: javax.script.ScriptException: ReferenceError: "window" is not defined in <eval> at line number 1
我遵循了以下文档:
- https://getopentest.org/reference/javascript-api.html#includeincludesource
- https://getopentest.org/docs/scripting-support.html#external-script-files
但是我尝试过的任何组合似乎都不起作用,我想我错过了一些东西:(
我用 chrome web-driver 配置了 actor.yml,如下所示:
# Selenium options
selenium:
# seleniumServerUrl: http://127.0.0.1:9515
desiredCapabilities:
browserName: chrome
chromeOptions:
args: [ --start-maximized ]
chromeDriverExePath: C:/Webdrivers/chromedriver.exe
chromeDriverExeArgs: [--start-maximized, --ignore-certificate-errors, --disable-popup-blocking, --disable-extensions-file-access-check, "--test-name", "--disable-extensions", "--disable-notifications", "--disable-web-security", "--disable-prompt-on-repost", "--browser-test", "--dom-automation", "--enable-caret-browsing", "--expose-internals-for-testing", "--force-login-manager-in-tests" ]
有问题的测试示例:
description: My Test
actors:
- actor: ACTOR1
segments:
- segment: 1
actions:
- description: include external SignalR script files
script: |
$include(["signalr.min.js", "signalr.tests.js"]);
- description: Initialize SignalR Connection
action: org.getopentest.selenium.ExecuteScript
args:
scriptArgs: $data("config").webChatUrl + $data("config").apiV1SignalRChathub
script: |
var hubUrl = arguments[0];
SignalRConnectionTest(hubUrl);
signalr.min.js 可以在以下位置找到:https ://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/3.1.7/signalr.min.js
解决方案
因此,经过大量的跟踪和错误后,我设法使某些工作正常进行。我从来没有让脚本包含在 OpenTest 中工作。我认为这是因为(还)未打开浏览器时存在问题,因此window
将只是未定义。所以基本上你只能包含不使用 DOM 的脚本......
我所做的是创建一个运行一些 javascript 的“本地”html 页面,并通过一些检查从 OpenTest yml 调用该页面。这是我所做的一个例子:
description: My Test
actors:
- actor: ACTOR1
segments:
- segment: 1
actions:
- description: Initialize Browser
action: org.getopentest.selenium.NavigateTo
args:
url: $data("config").someExternalUrlIsAlive
- description: Get Test Page File-Path
script: |
var File = Java.type("java.io.File");
var URLEncoder = Java.type("java.net.URLEncoder");
var StandardCharsets = Java.type("java.nio.charset.StandardCharsets");
var testPage = new File("..\\test-repo\\scripts\\testpage.html");
var testPageUrl = testPage.getAbsolutePath();
var argument = $data("config").someProperty;
var argumentUrlEncoded = URLEncoder.encode(argument, StandardCharsets.UTF_8.toString());
$sharedData.testpage = testPageUrl + "?arg=" + argumentUrlEncoded;
$log("The test-page path is " + $sharedData.testpage);
- description: Navigate to Test Page
action: org.getopentest.selenium.NavigateTo
args:
url: $sharedData.testpage
- description: Start Test
action: org.getopentest.selenium.Click
args:
locator: { id: btnTest }
- description: Give the test some time to complete
script: |
var Thread = Java.type("java.lang.Thread");
Thread.sleep(3000); // sleep 3 seconds.
- description: Read Test Page Result
action: org.getopentest.selenium.GetElements
args:
locator: { id: txtResult }
$localData:
resultElements: $output.elements
- description: Validate the Test Page Results
script: |
var txtResult = $localData.resultElements[0];
var testResult = txtResult.getAttribute("value")
if (testResult !== "200") {
$fail(
$format(
"We expected a valid connection result, but we got: {0}",
testResult
)
);
}
推荐阅读
- java - 如何编写从 CSV 文件读取输入的 TensorFlow Lite 解释器?
- gtk - 确定 Gtk.drag_motion 上的小部件类型
- spring - 将 Spring Boot 应用程序迁移到最新的 Java 版本 (Java 15)
- javascript - javascript从路径下载文件
- javascript - 在地址栏中隐藏 HTML 页面的域
- javascript - DiscordJS v12 userinfo 命令不起作用
- python - python中groupby时选择特定行的值
- java - 如何验证特定类型并使我的列表“类型安全”
- excel - 单元格绝对值最大值生成的宏
- reactjs - 在 MongoDB 中格式化默认日期模式