diff --git a/protractor-helpers/index.d.ts b/protractor-helpers/index.d.ts
index 3ab4691778..9821f5ba0c 100644
--- a/protractor-helpers/index.d.ts
+++ b/protractor-helpers/index.d.ts
@@ -2,6 +2,7 @@
// Project: https://github.com/wix/protractor-helpers
// Definitions by: John Cant
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+// TypeScript Version: 2.1
///
diff --git a/selenium-webdriver/index.d.ts b/selenium-webdriver/index.d.ts
index 39d56d7d5b..25b9b96017 100644
--- a/selenium-webdriver/index.d.ts
+++ b/selenium-webdriver/index.d.ts
@@ -2,6 +2,7 @@
// Project: https://github.com/SeleniumHQ/selenium/tree/master/javascript/node/selenium-webdriver
// Definitions by: Bill Armstrong , Yuki Kokubun , Craig Nishina
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+// TypeScript Version: 2.1
import * as chrome from './chrome';
import * as edge from './edge';
diff --git a/selenium-webdriver/remote.d.ts b/selenium-webdriver/remote.d.ts
index ae4f156ba7..384ca521ac 100644
--- a/selenium-webdriver/remote.d.ts
+++ b/selenium-webdriver/remote.d.ts
@@ -65,3 +65,41 @@ export class DriverService {
*/
stop(): webdriver.promise.Promise;
}
+
+/**
+ * A {@link webdriver.FileDetector} that may be used when running
+ * against a remote
+ * [Selenium server](http://selenium-release.storage.googleapis.com/index.html).
+ *
+ * When a file path on the local machine running this script is entered with
+ * {@link webdriver.WebElement#sendKeys WebElement#sendKeys}, this file detector
+ * will transfer the specified file to the Selenium server's host; the sendKeys
+ * command will be updated to use the transfered file's path.
+ *
+ * __Note:__ This class depends on a non-standard command supported on the
+ * Java Selenium server. The file detector will fail if used with a server that
+ * only supports standard WebDriver commands (such as the ChromeDriver).
+ *
+ * @final
+ */
+export class FileDetector extends webdriver.FileDetector {
+ /**
+ * @constructor
+ **/
+ constructor();
+
+ /**
+ * Prepares a `file` for use with the remote browser. If the provided path
+ * does not reference a normal file (i.e. it does not exist or is a
+ * directory), then the promise returned by this method will be resolved with
+ * the original file path. Otherwise, this method will upload the file to the
+ * remote server, which will return the file's path on the remote system so
+ * it may be referenced in subsequent commands.
+ *
+ * @param {!webdriver.WebDriver} driver The driver for the current browser.
+ * @param {string} file The path of the file to process.
+ * @return {!webdriver.promise.Promise} A promise for the processed
+ * file path.
+ */
+ handleFile(driver: webdriver.WebDriver, file: string): webdriver.promise.Promise;
+}
diff --git a/selenium-webdriver/test/remote.ts b/selenium-webdriver/test/remote.ts
new file mode 100644
index 0000000000..a783101290
--- /dev/null
+++ b/selenium-webdriver/test/remote.ts
@@ -0,0 +1,11 @@
+import * as remote from "selenium-webdriver/remote";
+import * as webdriver from "selenium-webdriver";
+
+function TestRemoteFileDetector() {
+ const driver: webdriver.WebDriver = new webdriver.Builder()
+ .withCapabilities(webdriver.Capabilities.chrome())
+ .build();
+
+ const fileDetector: remote.FileDetector = new remote.FileDetector();
+ fileDetector.handleFile(driver, 'path/to/file').then((path: string) => { /* empty */ });
+}
diff --git a/selenium-webdriver/tsconfig.json b/selenium-webdriver/tsconfig.json
index 50c76c7b28..6d56d236be 100644
--- a/selenium-webdriver/tsconfig.json
+++ b/selenium-webdriver/tsconfig.json
@@ -30,6 +30,7 @@
"testing.d.ts",
"test/index.ts",
"test/chrome.ts",
- "test/firefox.ts"
+ "test/firefox.ts",
+ "test/remote.ts"
]
}
\ No newline at end of file