diff --git a/package.json b/package.json index 433d49b9a..6b066655c 100644 --- a/package.json +++ b/package.json @@ -118,6 +118,7 @@ "underscore-cli": "~0.2.17", "unorm": "~1.3.3", "wd": "~0.3.1", + "wd-bridge": "~0.0.1", "yiewd": "~0.5.0" } } diff --git a/sample-code/examples/node/README.md b/sample-code/examples/node/README.md index 6fe8005c5..b2300006b 100644 --- a/sample-code/examples/node/README.md +++ b/sample-code/examples/node/README.md @@ -12,6 +12,7 @@ mocha sample-code/examples/node/ios-complex.js mocha sample-code/examples/node/ios-webview.js mocha sample-code/examples/node/ios-actions.js mocha sample-code/examples/node/ios-local-server.js +mocha sample-code/examples/node/ios-selenium-webdriver-bridge.js ``` ### dev (run against locally built app) @@ -23,6 +24,7 @@ DEV=1 mocha sample-code/examples/node/ios-complex.js DEV=1 mocha sample-code/examples/node/ios-webview.js DEV=1 mocha sample-code/examples/node/ios-actions.js DEV=1 mocha sample-code/examples/node/ios-local-server.js +DEV=1 mocha sample-code/examples/node/ios-selenium-webdriver-bridge.js ``` ### Sauce Labs @@ -36,6 +38,7 @@ SAUCE=1 mocha sample-code/examples/node/ios-simple.js SAUCE=1 mocha sample-code/examples/node/ios-complex.js SAUCE=1 mocha sample-code/examples/node/ios-webview.js SAUCE=1 mocha sample-code/examples/node/ios-actions.js +SAUCE=1 mocha sample-code/examples/node/ios-selenium-webdriver-bridge.js ``` ### Sauce Labs + Sauce Connect diff --git a/sample-code/examples/node/ios-selenium-webdriver-bridge.js b/sample-code/examples/node/ios-selenium-webdriver-bridge.js new file mode 100644 index 000000000..cbdc88c3a --- /dev/null +++ b/sample-code/examples/node/ios-selenium-webdriver-bridge.js @@ -0,0 +1,108 @@ +/* + The appium specific methods are not yet implemented by selenium-webdriver. + However it is possible to attach an existing selenium-webdriver to a wd + browser instance as below. + + prerequisite: + npm install selenium-webdriver +*/ + +"use strict"; + +require("./helpers/setup"); + +var webdriver = require('selenium-webdriver'), + wd = require("wd"), + wdBridge = require('wd-bridge')(wd), + _ = require('underscore'), + Q = require('q'), + chai = require('chai'); +chai.should(); + +describe("ios simple", function () { + this.timeout(300000); + var driver; + var wdDriver; + var allPassed = true; + + before(function () { + var builder; + var caps = new webdriver.Capabilities(); + + _(require("./helpers/caps").ios71).each(function (val, key) { + caps.set(key, val); + }); + caps.set('app', require("./helpers/apps").iosTestApp); + if (process.env.SAUCE) { + caps.set('username', process.env.SAUCE_USERNAME); + caps.set('accessKey', process.env.SAUCE_ACCESS_KEY); + caps.set('name', 'ios - selenium-webdriver bridge'); + caps.set('tags', ['sample']); + builder = new webdriver.Builder() + .usingServer('http://ondemand.saucelabs.com:80/wd/hub') + .withCapabilities(caps); + } else { + builder = new webdriver.Builder() + .usingServer('http://localhost:4723/wd/hub') + .withCapabilities(caps); + } + driver = builder.build(); + return wdBridge + .initFromSeleniumWebdriver(builder, driver) + .then(function (_wdDriver) { + wdDriver = _wdDriver; + require("./helpers/logging").configure(wdDriver); + }); + }); + + after(function () { + return new Q(driver + .quit()) + .finally(function () { + if (process.env.SAUCE) { + return wdDriver.sauceJobStatus(allPassed); + } + }); + }); + + afterEach(function () { + allPassed = allPassed && this.currentTest.state === 'passed'; + }); + + function populate() { + var sum = 0; + var populateField = function (name) { + return driver.wait(function () { + return driver.findElement(webdriver.By.name(name)); + }, 3000).then(function (el) { + var x = _.random(0,10); + sum += x; + return el.sendKeys('' + x); + }).then(function () { + return driver.findElement(webdriver.By.name('Done')).click(); + }).then(function () { return driver.sleep(1000); }); + }; + return populateField('IntegerA') + .then(function () { return populateField('IntegerB'); }) + .then(function () { return sum; }); + } + + it("should compute the sum", function () { + var sum; + return populate() + .then(function (_sum) { + sum = _sum; + // using appium specific methods to find a click the button + return wdDriver. + elementByAccessibilityId('ComputeSumButton') + .click().sleep(1000); + }).then(function () { + return wdDriver + .elementByIosUIAutomation('elements().withName("Answer");') + .text(); + }).then(function (text) { + text.should.equal("" + sum); + }); + }); + +});