Merge pull request #166 from jlipps/master

more flexibility in alert handling and getting text of buttons
This commit is contained in:
Sebastian Tiedtke
2013-02-12 10:11:09 -08:00
6 changed files with 66 additions and 5 deletions

View File

@@ -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);
}
};

View File

@@ -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;

View File

@@ -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:

View File

@@ -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

View File

@@ -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");

View File

@@ -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);