diff --git a/app/android.js b/app/android.js index 527e49430..78a999477 100644 --- a/app/android.js +++ b/app/android.js @@ -361,7 +361,11 @@ Android.prototype.elementEnabled = function(elementId, cb) { }; Android.prototype.elementSelected = function(elementId, cb) { - cb(new NotYetImplementedError(), null); + cb(new NotYetImplementedError(), null); +}; + +Android.prototype.getCssProperty = function(elementId, propertyName, cb) { + cb(new NotYetImplementedError(), null); }; Android.prototype.getPageSource = function(cb) { diff --git a/app/controller.js b/app/controller.js index 485ea4b9d..deb511d23 100644 --- a/app/controller.js +++ b/app/controller.js @@ -307,6 +307,13 @@ exports.getAttribute = function(req, res) { req.device.getAttribute(elementId, attributeName, getResponseHandler(req, res)); }; +exports.getCssProperty = function(req, res) { + var elementId = req.params.elementId + , propertyName = req.params.propertyName; + + req.device.getCssProperty(elementId, propertyName, getResponseHandler(req, res)); +}; + exports.getLocation = function(req, res) { var elementId = req.params.elementId; diff --git a/app/ios.js b/app/ios.js index cafea6cfa..529498637 100644 --- a/app/ios.js +++ b/app/ios.js @@ -768,6 +768,17 @@ IOS.prototype.elementSelected = function(elementId, cb) { } }; +IOS.prototype.getCssProperty = function(elementId, propertyName, cb) { + if (this.curWindowHandle) { + this.useAtomsElement(elementId, cb, _.bind(function(atomsElement) { + this.remote.executeAtom('get_value_of_css_property', [atomsElement, + propertyName], cb); + }, this)); + } else { + cb(new NotImplementedError(), null); + } +}; + IOS.prototype.getPageSource = function(cb) { if (this.curWindowHandle) { this.remote.execute('document.getElementsByTagName("html")[0].outerHTML', diff --git a/app/routing.js b/app/routing.js index f4090ce16..36bbfa634 100644 --- a/app/routing.js +++ b/app/routing.js @@ -36,6 +36,7 @@ module.exports = function(appium) { rest.get('/wd/hub/session/:sessionId?/element/:elementId?/size', controller.getSize); rest.get('/wd/hub/session/:sessionId?/element/:elementId?/pageIndex', controller.getPageIndex); rest.get('/wd/hub/session/:sessionId?/element/:elementId?/attribute/:name', controller.getAttribute); + rest.get('/wd/hub/session/:sessionId?/element/:elementId?/css/:propertyName', controller.getCssProperty); rest.post('/wd/hub/session/:sessionId?/element/:elementId?/clear', controller.clear); rest.post('/wd/hub/session/:sessionId?/frame', controller.frame); rest.post('/wd/hub/session/:sessionId?/keys', controller.keys); @@ -110,7 +111,6 @@ var routeNotYetImplemented = function(rest) { rest.get('/wd/hub/session/:sessionId?/element/:elementId?/name', controller.notYetImplemented); rest.get('/wd/hub/session/:sessionId?/element/:elementId?/equals/:other', controller.notYetImplemented); rest.get('/wd/hub/session/:sessionId?/element/:elementId?/location_in_view', controller.notYetImplemented); - rest.get('/wd/hub/session/:sessionId?/element/:elementId?/css/:propertyname', controller.notYetImplemented); rest.post('/wd/hub/session/:sessionId?/moveto', controller.notYetImplemented); rest.post('/wd/hub/session/:sessionId?/click', controller.notYetImplemented); rest.post('/wd/hub/session/:sessionId?/buttondown', controller.notYetImplemented); diff --git a/test/helpers/webview.js b/test/helpers/webview.js index 194c34942..1b8d9a0f1 100644 --- a/test/helpers/webview.js +++ b/test/helpers/webview.js @@ -261,6 +261,21 @@ module.exports.buildTests = function(webviewType) { }); }); + desc('css properties', function(h) { + it('should be able to get css properties', function(done) { + loadWebView(h.driver, function() { + h.driver.elementById('fbemail', function(err, el) { + should.not.exist(err); + el.getComputedCss('background-color', function(err, bg) { + should.not.exist(err); + bg.should.equal("rgba(255, 255, 255, 1)"); + done(); + }); + }); + }); + }); + }); + desc('getSize', function(h) { it('should return the right size', function(done) { loadWebView(h.driver, function() {