Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(131)

Unified Diff: pkg/webdriver/test/webdrivertest.dart

Issue 10933051: WebDriver bindings. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/webdriver/test/webdrivertest.dart
===================================================================
--- pkg/webdriver/test/webdrivertest.dart (revision 0)
+++ pkg/webdriver/test/webdrivertest.dart (revision 0)
@@ -0,0 +1,421 @@
+#library('webdriver_test');
+#import('../webdriver.dart');
+#import('../../../pkg/unittest/unittest.dart');
+
+WebDriver web_driver;
+
+/**
+ * These tests are not expected to be run as part of normal automated testing,
+ * as they are slow, many of them do not yet work due to WebDriver limitations,
+ * and they have external dependencies. Nontheless it is useful to keep them
+ * here for manual testing.
+ */
+main() {
+ var web_driver = new WebDriver('localhost', 4444, '/wd/hub');
+ var session = null;
+ var completionCallback;
+
+ var exceptionHandler = (e) {
+ print('Handled: ${e.toString()}');
+ if (session != null) {
+ session.close().then((_){
+ session = null;
+ config.handleExternalError(e, 'Unexpected failure');
+ });
+ }
+ return true;
+ };
+
+ group('Sessionless tests', () {
+ setUp(() {
+ completionCallback = expectAsync0((){
+ });
+ });
+
+ test('Get status', () {
+ Future f = web_driver.getStatus();
+ f.handleException(exceptionHandler);
+ f.then((status) {
+ expect(status['sessionId'], isNull);
+ completionCallback();
+ });
+ });
+ });
+
+ group('Basic session tests', () {
+ setUp(() {
+ completionCallback = expectAsync0((){
+ });
+ });
+
+ test('Create session/get capabilities', () {
+ Future f = web_driver.newSession('chrome');
+ f.handleException(exceptionHandler);
+ f.chain((_session) {
+ session = _session;
+ return session.getCapabilities();
+ }).chain((capabilities) {
+ expect(capabilities['browserName'], equals('chrome'));
+ return session.close();
+ }).then((_) {
+ session = null;
+ completionCallback();
+ });
+ });
+
+ test('Create and get multiple sessions', () {
+ Future f = web_driver.newSession('chrome');
+ var session2 = null;
+ f.handleException(exceptionHandler);
+ f.chain((_session) {
+ session = _session;
+ return web_driver.newSession('firefox');
+ }).chain((_session) {
+ session2 = _session;
+ return web_driver.getSessions();
+ }).chain((sessions) {
+ expect(sessions.length, greaterThanOrEqualTo(2));
+ return session2.close();
+ }).chain((_) {
+ return session.close();
+ }).then((_) {
+ session = null;
+ completionCallback();
+ });
+ });
+
+ test('Set/get url', () {
+ Future f = web_driver.newSession('chrome');
+ f.handleException(exceptionHandler);
+ f.chain((_session) {
+ session = _session;
+ return session.setUrl('http://translate.google.com');
+ }).chain((_) {
+ return session.getUrl();
+ }).chain((u) {
+ expect(u, equals('http://translate.google.com/'));
+ return session.close();
+ }).then((_) {
+ session = null;
+ completionCallback();
+ });
+ });
+
+ test('Navigation', () {
+ Future f = web_driver.newSession('chrome');
+ f.handleException(exceptionHandler);
+ f.chain((_session) {
+ session = _session;
+ return session.setUrl('http://translate.google.com');
+ }).chain((_) {
+ return session.setUrl('http://www.google.com');
+ }).chain((_) {
+ return session.navigateBack();
+ }).chain((_) {
+ return session.getUrl();
+ }).chain((u) {
+ expect(u, equals('http://translate.google.com/'));
+ return session.navigateForward();
+ }).chain((_) {
+ return session.getUrl();
+ }).chain((url) {
+ expect(url, equals('http://www.google.com/'));
+ return session.close();
+ }).then((_) {
+ session = null;
+ completionCallback();
+ });
+ });
+
+ test('Take a Screen shot', () {
+ Future f = web_driver.newSession('chrome');
+ f.handleException(exceptionHandler);
+ f.chain((_session) {
+ session = _session;
+ return session.setUrl('http://translate.google.com');
+ }).chain((_) {
+ return session.getScreenshot();
+ }).chain((image) {
+ expect(image.length, greaterThan(10000));
+ return session.close();
+ }).then((_) {
+ session = null;
+ completionCallback();
+ });
+ });
+ });
+
+ group('Window tests', () {
+ setUp(() {
+ completionCallback = expectAsync0((){
+ });
+ });
+
+ test('Window position and size', () {
+ var window;
+ Future f = web_driver.newSession('chrome');
+ f.handleException(exceptionHandler);
+ f.chain((_session) {
+ session = _session;
+ return session.getWindow();
+ }).chain((_window) {
+ window = _window;
+ return window.setSize(200, 100);
+ }).chain((_) {
+ return window.getSize();
+ }).chain((ws) {
+ expect(ws['width'], equals(200));
+ expect(ws['height'], equals(100));
+ return window.setPosition(100, 80);
+ }).chain((_) {
+ return window.getPosition();
+ }).chain((wp) {
+ expect(wp['x'], equals(100));
+ expect(wp['y'], equals(80));
+ return session.close();
+ }).then((_) {
+ session = null;
+ completionCallback();
+ });
+ });
+ });
+
+ group('Cookie tests', () {
+ setUp(() {
+ completionCallback = expectAsync0((){
+ });
+ });
+
+ test('Create/query/delete', () {
+ var window;
+ var numcookies;
+ Future f = web_driver.newSession('chrome');
+ f.handleException(exceptionHandler);
+ f.chain((_session) {
+ session = _session;
+ // Must go to a web page first to set a cookie.
+ return session.setUrl('http://translate.google.com');
+ }).chain((_) {
+ return session.getCookies();
+ }).chain((cookies) {
+ numcookies = cookies.length;
+ return session.setCookie({ 'name': 'foo', 'value': 'bar'});
+ }).chain((_) {
+ return session.getCookies();
+ }).chain((cookies) {
+ expect(cookies.length, equals(numcookies + 1));
+ expect(cookies, someElement(allOf(
+ containsPair('name', 'foo'),
+ containsPair('value', 'bar'))));
+ return session.deleteCookie('foo');
+ }).chain((_) {
+ return session.getCookies();
+ }).chain((cookies) {
+ expect(cookies.length, numcookies);
+ expect(cookies, everyElement(isNot(containsPair('name', 'foo'))));
+ return session.deleteCookie('foo');
+ }).chain((_) {
+ return session.getCookies();
+ }).chain((cookies) {
+ expect(cookies.length, numcookies);
+ return session.close();
+ }).then((_) {
+ session = null;
+ completionCallback();
+ });
+ });
+ });
+
+ group('Storage tests', () {
+ setUp(() {
+ completionCallback = expectAsync0((){
+ });
+ });
+
+ // Storage tests are return 500 errors. This seems to be a bug in
+ // the remote driver.
+
+ test('Local Storage Create/query/delete', () {
+ var window;
+ var numkeys;
+ Future f = web_driver.newSession('htmlunit');
+ f.handleException(exceptionHandler);
+ f.chain((_session) {
+ session = _session;
+ // Must go to a web page first.
+ return session.setUrl('http://translate.google.com');
+ }).chain((_) {
+ return session.getLocalStorageKeys();
+ }).chain((keys) {
+ print(keys);
+ numkeys = keys.length;
+ return session.setLocalStorageItem('foo', 'bar');
+ }).chain((_) {
+ return session.getLocalStorageKeys();
+ }).chain((keys) {
+ expect(keys.length, equals(numkeys + 1));
+ expect(keys, someElement(equals('foo')));
+ return session.getLocalStorageCount();
+ }).chain((count) {
+ expect(count, equals(numkeys + 1));
+ return session.getLocalStorageValue('foo');
+ }).chain((value) {
+ expect(value, equals('bar'));
+ return session.deleteLocalStorageValue('foo');
+ }).chain((_) {
+ return session.getLocalStorageKeys();
+ }).chain((keys) {
+ expect(keys.length, equals(numkeys));
+ expect(keys, everyElement(isNot(equals('foo'))));
+ return session.setLocalStorageItem('foo', 'bar');
+ }).chain((_) {
+ return session.clearLocalStorage();
+ }).chain((_) {
+ return session.getLocalStorageKeys();
+ }).chain((keys) {
+ expect(keys.length, isZero);
+ return session.close();
+ }).then((_) {
+ session = null;
+ completionCallback();
+ });
+ });
+
+ test('Session Storage Create/query/delete', () {
+ var window;
+ var numkeys;
+ Future f = web_driver.newSession('chrome');
+ f.handleException(exceptionHandler);
+ f.chain((_session) {
+ session = _session;
+ // Must go to a web page first.
+ return session.setUrl('http://translate.google.com');
+ }).chain((_) {
+ return session.getSessionStorageKeys();
+ }).chain((keys) {
+ print(keys);
+ numkeys = keys.length;
+ return session.setSessionStorageItem('foo', 'bar');
+ }).chain((_) {
+ return session.getSessionStorageKeys();
+ }).chain((keys) {
+ expect(keys.length, equals(numkeys + 1));
+ expect(keys, someElement(equals('foo')));
+ return session.getSessionStorageCount();
+ }).chain((count) {
+ expect(count, equals(numkeys + 1));
+ return session.getSessionStorageValue('foo');
+ }).chain((value) {
+ expect(value, equals('bar'));
+ return session.deleteSessionStorageValue('foo');
+ }).chain((_) {
+ return session.getSessionStorageKeys();
+ }).chain((keys) {
+ expect(keys.length, equals(numkeys));
+ expect(keys, everyElement(isNot(equals('foo'))));
+ return session.setSessionStorageItem('foo', 'bar');
+ }).chain((_) {
+ return session.clearSessionStorage();
+ }).chain((_) {
+ return session.getSessionStorageKeys();
+ }).chain((keys) {
+ expect(keys.length, isZero);
+ return session.close();
+ }).then((_) {
+ session = null;
+ completionCallback();
+ });
+ });
+
+ });
+
+ group('Script tests', () {
+ setUp(() {
+ completionCallback = expectAsync0((){
+ });
+ });
+
+ // This test is just timing out eventually with a 500 response.
+
+ test('Sync script', () {
+ Future f = web_driver.newSession('chrome');
+ f.handleException(exceptionHandler);
+ f.chain((_session) {
+ session = _session;
+ return session.setUrl('http://translate.google.com');
+ }).chain((_) {
+ return session.execute('function(x, y) { return x * y; }', [2, 3]);
+ }).chain((value) {
+ expect(value, equals(6));
+ return session.close();
+ }).then((_) {
+ session = null;
+ completionCallback();
+ });
+ });
+ });
+
+ group('Element tests', () {
+ setUp(() {
+ completionCallback = expectAsync0((){
+ });
+ });
+
+ test('Elements', () {
+ var w;
+ Future f = web_driver.newSession('chrome');
+ f.handleException(exceptionHandler);
+ f.chain((_session) {
+ session = _session;
+ return session.setUrl('http://duckduckgo.com');
+ }).chain((_) {
+ return session.findElement('id', 'search_form_input_homepage');
+ }).chain((_w) {
+ print(_w);
+ w = _w['ELEMENT'];
+ return session.sendKeyStrokesToElement(w,
+ [ 'g', 'o', 'o', 'g', 'l', 'e' ]);
+ }).chain((_) {
+ return session.submit(w);
+ }).chain((_) {
+ return session.findElements('class name', 'links_zero_click_disambig');
+ }).chain((divs) {
+ expect(divs.length, greaterThan(0));
+ return session.close();
+ }).then((_) {
+ session = null;
+ completionCallback();
+ });
+ });
+ });
+
+ group('Log tests', () {
+ setUp(() {
+ completionCallback = expectAsync0((){
+ });
+ });
+
+ // Currently, getLogTypes returns a 404, and attempts to get the
+ // logs either return 500 with 'Unknown log type' or 500 with
+ // 'Unable to convert logEntries'.
+
+ test('Log retrieval', () {
+ Future f = web_driver.newSession('chrome');
+ f.handleException(exceptionHandler);
+ f.chain((_session) {
+ session = _session;
+ return session.getLogTypes();
+ }).chain((logTypes) {
+ //print(logTypes);
+ return session.getLogs('driver');
+ }).chain((logs) {
+ //print(logs);
+ return session.close();
+ }).then((_) {
+ session = null;
+ completionCallback();
+ });
+ });
+ });
+}
+

Powered by Google App Engine
This is Rietveld 408576698