版本
- OpenTest——版本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-脚本文件
但我尝试的组合似乎都不起作用,我想我错过了一些东西:(
我的actor.yml配置了chrome web驱动程序,如下所示:
# 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);
signaler.min.js可在以下位置找到:https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/3.1.7/signalr.min.js
因此,经过大量的跟踪和错误,我终于找到了一些工作。我从来没有得到包括在OpenTest中工作的脚本。我认为这是因为当浏览器还没有打开时会出现问题,因此window
将是未定义的。因此,基本上只能包含不使用DOM的脚本。。。
我所做的是创造一个";本地";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
)
);
}