首页 > 解决方案 > 未定义包括外部文件“signalr.min.js”窗口

问题描述

版本

包括我需要的外部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

我遵循了以下文档:

但是我尝试过的任何组合似乎都不起作用,我想我错过了一些东西:(

我用 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

标签: javascriptseleniumopentest

解决方案


因此,经过大量的跟踪和错误后,我设法使某些工作正常进行。我从来没有让脚本包含在 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
                  )
                );
              }

推荐阅读