在safari上运行量角器测试,说" Angular无法在页面上找到https://angularjs.org/"

时间:2017-04-12 08:16:24

标签: javascript angularjs selenium safari protractor

我尝试在Safari上运行量角器测试,但即使有一个官方示例我也有问题(http://www.protractortest.org/我附在我的conf.js和todo-spec.js文件下面。)

当我设置browser.ignoreSynchronization = true; (What is browser.ignoreSynchronization in protractor?)然后测试工作,但我不能利用量角器。

https://angularjs.org/使用角度1.6.4

  • 从运行测试中记录:

    $ node ./node_modules/protractor/built/cli.js conf.js --browser safari
    (node:5778) DeprecationWarning: os.tmpDir() is deprecated. Use os.tmpdir() instead.
    [09:49:28] I/hosted - Using the selenium server at http://MAC_IP:4444/wd/hub
    [09:49:28] I/launcher - Running 1 instances of WebDriver
    Started
    [09:49:41] E/protractor - Could not find Angular on page https://angularjs.org/ : angular never provided resumeBootstrap
    F
    
    Failures:
    1) angularjs homepage todo list should add a todo
      Message:
        Failed: Angular could not be found on the page https://angularjs.org/. If this is not an Angular application, you may need to turn off waiting for Angular. Please see https://github.com/angular/protractor/blob/master/docs/timeouts.md#waiting-for-angular-on-page-load
      Stack:
        Error: Angular could not be found on the page https://angularjs.org/. If this is not an Angular application, you may need to turn off waiting for Angular. Please see https://github.com/angular/protractor/blob/master/docs/timeouts.md#waiting-for-angular-on-page-load
            at /home/tester/proj/js/node_modules/protractor/built/browser.js:506:23
            at ManagedPromise.invokeCallback_ (/home/tester/proj/js/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:1379:14)
            at TaskQueue.execute_ (/home/tester/proj/js/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2913:14)
            at TaskQueue.executeNext_ (/home/tester/proj/js/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2896:21)
            at asyncRun (/home/tester/proj/js/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2775:27)
            at /home/tester/proj/js/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:639:7
            at process._tickCallback (internal/process/next_tick.js:103:7)
        From: Task: Run it("should add a todo") in control flow
            at Object.<anonymous> (/home/tester/proj/js/node_modules/jasminewd2/index.js:79:14)
        From asynchronous test: 
        Error
            at Suite.<anonymous> (/home/tester/proj/js/todo-spec.js:2:3)
            at Object.<anonymous> (/home/tester/proj/js/todo-spec.js:1:1)
            at Module._compile (module.js:571:32)
            at Object.Module._extensions..js (module.js:580:10)
            at Module.load (module.js:488:32)
            at tryModuleLoad (module.js:447:12)
    
    1 spec, 1 failure
    Finished in 11.68 seconds
    [09:49:41] I/launcher - 0 instance(s) of WebDriver still running
    [09:49:41] I/launcher - safari #01 failed 1 test(s)
    [09:49:41] I/launcher - overall: 1 failed spec(s)
    [09:49:41] E/launcher - Process exited with error code 1
    
  • webdriver-manager启动日志:

    $  ./node_modules/protractor/bin/webdriver-manager start
    [09:49:21] I/start - java -Dwebdriver.chrome.driver=/Users/tester/proj/js/node_modules/protractor/node_modules/webdriver-manager/selenium/chromedriver_2.29 -Dwebdriver.gecko.driver=/Users/tester/proj/js/node_modules/protractor/node_modules/webdriver-manager/selenium/geckodriver-v0.15.0 -jar /Users/tester/proj/js/node_modules/protractor/node_modules/webdriver-manager/selenium/selenium-server-standalone-3.3.1.jar -port 4444
    [09:49:21] I/start - seleniumProcess.pid: 95779
    09:49:21.673 INFO - Selenium build info: version: '3.3.1', revision: '5234b32'
    09:49:21.673 INFO - Launching a standalone Selenium Server
    2017-04-12 09:49:21.724:INFO::main: Logging initialized @358ms to org.seleniumhq.jetty9.util.log.StdErrLog
    09:49:21.777 INFO - Driver provider org.openqa.selenium.ie.InternetExplorerDriver registration is skipped:
     registration capabilities Capabilities [{ensureCleanSession=true, browserName=internet explorer, version=, platform=WINDOWS}] does not match the current platform MAC
    09:49:21.777 INFO - Driver provider org.openqa.selenium.edge.EdgeDriver registration is skipped:
     registration capabilities Capabilities [{browserName=MicrosoftEdge, version=, platform=WINDOWS}] does not match the current platform MAC
    09:49:21.777 INFO - Driver class not found: com.opera.core.systems.OperaDriver
    09:49:21.777 INFO - Driver provider com.opera.core.systems.OperaDriver registration is skipped:
    Unable to create new instances on this machine.
    09:49:21.778 INFO - Driver class not found: com.opera.core.systems.OperaDriver
    09:49:21.778 INFO - Driver provider com.opera.core.systems.OperaDriver is not registered
    2017-04-12 09:49:21.823:INFO:osjs.Server:main: jetty-9.2.20.v20161216
    2017-04-12 09:49:21.849:INFO:osjsh.ContextHandler:main: Started o.s.j.s.ServletContextHandler@5c3bd550{/,null,AVAILABLE}
    2017-04-12 09:49:21.880:INFO:osjs.AbstractConnector:main: Started ServerConnector@1ce92674{HTTP/1.1,[http/1.1]}{0.0.0.0:4444}
    2017-04-12 09:49:21.881:INFO:osjs.Server:main: Started @515ms
    09:49:21.881 INFO - Selenium Server is up and running
    09:49:28.191 INFO - SessionCleaner initialized with insideBrowserTimeout 0 and clientGoneTimeout 1800000 polling every 180000
    09:49:28.214 INFO - Executing: [new session: Capabilities [{count=1, browserName=safari}]])
    09:49:28.235 INFO - Creating a new session for Capabilities [{count=1, browserName=safari}]
    09:49:29.500 INFO - Detected dialect: OSS
    09:49:29.515 INFO - Done: [new session: Capabilities [{count=1, browserName=safari}]]
    09:49:29.533 INFO - Executing: [set script timeout: 11000])
    09:49:29.541 INFO - Done: [set script timeout: 11000]
    09:49:29.715 INFO - Executing: [get: about:blank])
    09:49:29.954 INFO - Done: [get: about:blank]
    09:49:29.964 INFO - Executing: [execute script: window.name = "NG_DEFER_BOOTSTRAP!" + window.name;window.location.replace("https://angularjs.org/");, []])
    09:49:29.994 INFO - Done: [execute script: window.name = "NG_DEFER_BOOTSTRAP!" + window.name;window.location.replace("https://angularjs.org/");, []]
    09:49:30.005 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.040 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.049 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.054 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.064 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.090 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.102 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.107 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.120 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.141 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.149 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.154 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.161 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.191 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.199 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.204 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.212 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.241 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.250 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.256 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.273 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.442 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.451 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.455 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.475 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.492 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.500 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.505 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.512 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.543 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.549 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.553 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.560 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.591 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.600 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.604 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.610 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.647 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.653 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.657 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.662 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.698 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.704 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.742 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.750 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.754 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.761 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.797 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.803 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.844 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.851 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.856 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.863 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.897 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.903 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.908 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.915 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.946 INFO - Done: [execute script: return window.location.href;, []]
    09:49:30.956 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:30.996 INFO - Done: [execute script: return window.location.href;, []]
    09:49:31.002 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:31.006 INFO - Done: [execute script: return window.location.href;, []]
    09:49:31.013 INFO - Executing: [execute script: return window.location.href;, []])
    09:49:31.056 INFO - Done: [execute script: return window.location.href;, []]
    09:49:31.062 INFO - Executing: [execute async script: try { return (function (attempts, ng12Hybrid, asyncCallback) {
      var callback = function(args) {
        setTimeout(function() {
          asyncCallback(args);
        }, 0);
      };
      var check = function(n) {
        try {
          if (!ng12Hybrid && window.getAllAngularTestabilities) {
            callback({ver: 2});
          } else if (window.angular && window.angular.resumeBootstrap) {
            callback({ver: 1});
          } else if (n < 1) {
            if (window.angular) {
              callback({message: 'angular never provided resumeBootstrap'});
            } else {
              callback({message: 'retries looking for angular exceeded'});
            }
          } else {
            window.setTimeout(function() {check(n - 1);}, 1000);
          }
        } catch (e) {
          callback({message: e});
        }
      };
      check(attempts);
    }).apply(this, arguments); }
    catch(e) { throw (e instanceof Error) ? e : new Error(e); }, [10, false]])
    09:49:41.340 INFO - Done: [execute async script: try { return (function (attempts, ng12Hybrid, asyncCallback) {
      var callback = function(args) {
        setTimeout(function() {
          asyncCallback(args);
        }, 0);
      };
      var check = function(n) {
        try {
          if (!ng12Hybrid && window.getAllAngularTestabilities) {
            callback({ver: 2});
          } else if (window.angular && window.angular.resumeBootstrap) {
            callback({ver: 1});
          } else if (n < 1) {
            if (window.angular) {
              callback({message: 'angular never provided resumeBootstrap'});
            } else {
              callback({message: 'retries looking for angular exceeded'});
            }
          } else {
            window.setTimeout(function() {check(n - 1);}, 1000);
          }
        } catch (e) {
          callback({message: e});
        }
      };
      check(attempts);
    }).apply(this, arguments); }
    catch(e) { throw (e instanceof Error) ? e : new Error(e); }, [10, false]]
    09:49:41.351 INFO - Executing: [delete session: 199560b8-0691-456f-927e-15991a47acea])
    09:49:41.446 INFO - Done: [delete session: 199560b8-0691-456f-927e-15991a47acea]
    
  • conf.js:

    exports.config = {
        framework: 'jasmine2',
        seleniumAddress: 'http://MAC_IP:4444/wd/hub',
        specs: ['todo-spec.js']
    };
    
  • 待办事项-spec.js:

    describe('angularjs homepage todo list', function() {
      it('should add a todo', function() {
        browser.get('https://angularjs.org');
    
        element(by.model('todoList.todoText')).sendKeys('write first protractor test');
        element(by.css('[value="add"]')).click();
    
        var todoList = element.all(by.repeater('todo in todoList.todos'));
        expect(todoList.count()).toEqual(3);
        expect(todoList.get(2).getText()).toEqual('write first protractor test');
    
        // You wrote your first test, cross it off the list
        todoList.get(2).element(by.css('input')).click();
        var completedAmount = element.all(by.css('.done-true'));
        expect(completedAmount.count()).toEqual(2);
      });
    });
    

1 个答案:

答案 0 :(得分:0)

我知道Safari 10中的异步内容存在一些问题,另请参阅量角器git中的this comment。它描述了Safari Desktop的解决方法。

希望它有所帮助/给你足够的信息。