diff --git a/app/ios.js b/app/ios.js index 82d8f4d9f..6b8ec1878 100644 --- a/app/ios.js +++ b/app/ios.js @@ -394,7 +394,7 @@ IOS.prototype.getText = function(elementId, cb) { this.remote.executeAtom('get_text', [atomsElement], cb); } } else { - var command = ["au.getElement('", elementId, "').value()"].join(''); + var command = ["au.getElement('", elementId, "').text()"].join(''); this.proxy(command, cb); } }; diff --git a/app/uiauto/appium/app.js b/app/uiauto/appium/app.js index 771cb466c..374b5f738 100644 --- a/app/uiauto/appium/app.js +++ b/app/uiauto/appium/app.js @@ -74,7 +74,8 @@ $.extend(au, { , lookup: function(selector, ctx) { if (typeof selector === 'string') { - var _ctx = this.web ? this.web : this.mainWindow; + var _ctx = this.mainWindow + , elems = []; if (typeof ctx === 'string') { _ctx = this.cache[ctx]; @@ -83,7 +84,14 @@ $.extend(au, { } this.target.pushTimeout(0); - var elems = $(selector, _ctx); + if (selector === 'alert') { + var alert = this.mainApp.alert(); + if (alert) { + elems = $(alert); + } + } else { + elems = $(selector, _ctx); + } this.target.popTimeout(); return elems; diff --git a/app/uiauto/appium/element.js b/app/uiauto/appium/element.js index 0e1ec2e8a..0e5b98606 100644 --- a/app/uiauto/appium/element.js +++ b/app/uiauto/appium/element.js @@ -64,6 +64,15 @@ UIAElement.prototype.hasChildren = function() { type === "UIASwitch" || type === "UIAElementNil"); }; +UIAElement.prototype.text = function() { + var type = this.type(); + if (type === "UIAButton") { + return this.label(); + } else { + return this.value(); + } +}; + UIAElement.prototype.matchesTagName = function(tagName) { var type = this.type(); // i.e. "UIALink" matches "link: diff --git a/sample-code/examples/ruby/simple_test.rb b/sample-code/examples/ruby/simple_test.rb index 91eab0113..1577c48ad 100644 --- a/sample-code/examples/ruby/simple_test.rb +++ b/sample-code/examples/ruby/simple_test.rb @@ -85,4 +85,15 @@ describe "Computation" do a.accept end + it "should find alerts" do + els = @driver.find_elements(:tag_name, 'button') + els[1].click + alert = @driver.find_element(:tag_name, 'alert') + buttons = alert.find_elements(:tag_name, 'button') + buttons[0].text.should eq("Cancel") + buttons[0].click + alerts = @driver.find_elements(:tag_name, 'alert') + alerts.should be_empty + end + end diff --git a/test/functional/testapp/basic.js b/test/functional/testapp/basic.js index 992a9e5a2..d6ba5c2bf 100644 --- a/test/functional/testapp/basic.js +++ b/test/functional/testapp/basic.js @@ -137,6 +137,15 @@ describeWd('calc app', function(h) { //}; //_.each(["PORTRAIT", "LANDSCAPE"], testOrientation); + it('should be able to get text of a button', function(done) { + h.driver.elementsByTagName('button', function(err, els) { + els[0].text(function(err, text) { + text.should.eql("ComputeSumButton"); + done(); + }); + }); + }); + return it('should get an app screenshot', function(done){ h.driver.takeScreenshot(function(err, screenshot){ assert.notEqual(typeof screenshot, "undefined"); diff --git a/test/functional/testapp/findElement.js b/test/functional/testapp/findElement.js index 52a977886..085fafeb5 100644 --- a/test/functional/testapp/findElement.js +++ b/test/functional/testapp/findElement.js @@ -11,7 +11,7 @@ describeWd('elementByTagName', function(h) { done(); }); }); - return it('should not find any invalid elements on the app and throw error', function(done) { + it('should not find any invalid elements on the app and throw error', function(done) { h.driver.elementByTagName('buttonNotThere', function(err, element) { should.not.exist(element); err.status.should.eql(7); @@ -19,9 +19,33 @@ describeWd('elementByTagName', function(h) { done(); }); }); + it('should find alerts when they exist', function(done) { + h.driver.elementsByTagName('button', function(err, els) { + should.not.exist(err); + els[1].click(function() { + h.driver.elementByTagName('alert', function(err, el) { + should.not.exist(err); + el.elementsByTagName('button', function(err, buttons) { + should.not.exist(err); + buttons.length.should.equal(2); + done(); + }); + }); + }); + }); + }); + it('should not find alerts when they dont exist', function(done) { + h.driver.elementByTagName('alert', function(err, el) { + should.exist(err); + should.not.exist(el); + err.status.should.eql(7); + err['jsonwire-error'].summary.should.eql('NoSuchElement'); + done(); + }); + }); }); -describeWd('elementByTagName', function(h) { +describeWd('elementsByTagName', function(h) { it('should find both elements on the app', function(done) { h.driver.elementsByTagName('button', function(err, elements) { elements.length.should.equal(2);