我尝试在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);
});
});
答案 0 :(得分:0)
我知道Safari 10中的异步内容存在一些问题,另请参阅量角器git中的this comment。它描述了Safari Desktop的解决方法。
希望它有所帮助/给你足够的信息。