Merge pull request #2 from DrMarcII/keys

Add keys.dart that defines a bunch of static const Key values.
diff --git a/lib/src/keys.dart b/lib/src/keys.dart
new file mode 100644
index 0000000..584fede
--- /dev/null
+++ b/lib/src/keys.dart
@@ -0,0 +1,62 @@
+part of webdriver;
+
+class Keys {
+  static const String NULL = '\uE000';
+  static const String CANCEL = '\uE001';
+  static const String HELP = '\uE002';
+  static const String BACK_SPACE = '\uE003';
+  static const String TAB = '\uE004';
+  static const String CLEAR = '\uE005';
+  static const String RETURN = '\uE006';
+  static const String ENTER = '\uE007';
+  static const String SHIFT = '\uE008';
+  static const String CONTROL = '\uE009';
+  static const String ALT = '\uE00A';
+  static const String PAUSE = '\uE00B';
+  static const String ESCAPE = '\uE00C';
+  static const String SPACE = '\uE00D';
+  static const String PAGE_UP = '\uE00E';
+  static const String PAGE_DOWN = '\uE00F';
+  static const String END = '\uE010';
+  static const String HOME = '\uE011';
+  static const String LEFT = '\uE012';
+  static const String UP = '\uE013';
+  static const String RIGHT = '\uE014';
+  static const String DOWN = '\uE015';
+  static const String INSERT = '\uE016';
+  static const String DELETE = '\uE017';
+  static const String SEMICOLON = '\uE018';
+  static const String EQUALS = '\uE019';
+  static const String NUMPAD_0 = '\uE01A';
+  static const String NUMPAD_1 = '\uE01B';
+  static const String NUMPAD_2 = '\uE01C';
+  static const String NUMPAD_3 = '\uE01D';
+  static const String NUMPAD_4 = '\uE01E';
+  static const String NUMPAD_5 = '\uE01F';
+  static const String NUMPAD_6 = '\uE020';
+  static const String NUMPAD_7 = '\uE021';
+  static const String NUMPAD_8 = '\uE022';
+  static const String NUMPAD_9 = '\uE023';
+
+  static const String MULTIPLY = '\uE024';
+  static const String ADD = '\uE025';
+  static const String SEPARATOR = '\uE026';
+  static const String SUBTRACT = '\uE027';
+  static const String DECIMAL = '\uE028';
+  static const String DIVIDE = '\uE029';
+  static const String F1 = '\uE031';
+  static const String F2 = '\uE032';
+  static const String F3 = '\uE033';
+  static const String F4 = '\uE034';
+  static const String F5 = '\uE035';
+  static const String F6 = '\uE036';
+  static const String F7 = '\uE037';
+  static const String F8 = '\uE038';
+  static const String F9 = '\uE039';
+  static const String F10 = '\uE03A';
+  static const String F11 = '\uE03B';
+  static const String F12 = '\uE03C';
+  static const String COMMAND = '\uE03D';
+  static const String META = COMMAND; // alias
+
+}
\ No newline at end of file
diff --git a/lib/webdriver.dart b/lib/webdriver.dart
index ee89617..387e6bc 100644
--- a/lib/webdriver.dart
+++ b/lib/webdriver.dart
@@ -15,6 +15,7 @@
 part 'src/command_processor.dart';
 part 'src/common.dart';
 part 'src/keyboard.dart';
+part 'src/keys.dart';
 part 'src/mouse.dart';
 part 'src/navigation.dart';
 part 'src/options.dart';
diff --git a/test/src/keyboard_test.dart b/test/src/keyboard_test.dart
index c71ed7a..4ea484f 100644
--- a/test/src/keyboard_test.dart
+++ b/test/src/keyboard_test.dart
@@ -11,7 +11,7 @@
       WebElement textInput;
 
       setUp(() {
-        return WebDriver.createDriver()
+        return WebDriver.createDriver(desiredCapabilities: Capabilities.chrome)
             .then((_driver) => driver = _driver)
             .then((_) => driver.get('file://' + file.fullPathSync()))
             .then((_) =>
@@ -45,6 +45,16 @@
               expect(value, 'abcdef');
             });
       });
+
+      // doesn't work with chromedriver
+      // https://code.google.com/p/chromedriver/issues/detail?id=443
+      test('sendKeys -- with tab', () {
+        return driver.keyboard.sendKeys(['abc', Keys.TAB, 'def'])
+            .then((_) => textInput.attributes['value'])
+            .then((value) {
+              expect(value, 'abc');
+            });
+      });
     });
   }
 }