Reputation: 1147
I have created a simple project using storyboards containing just a UIDatePicker with mode=Date (so that dates appear like "November" "28" "2011").
Within Instruments UI Automation I am trying to set the values of the individual date picker wheels.
I can successfully use the selectValue() method to set the wheels which contains numeric values but cannot manage to set text value of the month e.g. "November".
This works..
target.frontMostApp().mainWindow().pickers()[0].wheels()[1].selectValue(12);
but this doesn't..
target.frontMostApp().mainWindow().pickers()[0].wheels()[0].selectValue("November");
I get the error: Script threw an uncaught JavaScript error: - selectValue is not supported on a picker with undefined values
I have done a UIATarget.localTarget().frontMostApp().logElementTree()
and can see the value is correct:
UIAPickerWheel: value:November rect:{{1, 142}, {146, 216}}
Please can anyone advise on what I might be doing wrong, many thanks.
Upvotes: 5
Views: 4465
Reputation: 707
This has been remedied in the latest version of xcode (4.5.2)
target.frontMostApp().mainWindow().pickers()[0].wheels()[0].selectValue("November");
It will now work.
Upvotes: 4
Reputation: 341
Just find all the values of the particular picker wheel using
var pickerWheel1Values = picker.wheels()[1]. values();
and if you want to set November just do
picker.wheels()[index]. selectValue (pickerWheel1Values[10]);
Upvotes: 0
Reputation: 901
For anyone using Appium see this page here on the discussion board: https://groups.google.com/d/msg/appium-discuss/uYdRTdQDvpU/2I7KSFHnqFwJ
The flow goes like this:
The last step is wrong and you need to use sendKeys() instead of setValue()
For a real example like how I used it would be something like this
String pickerWheelLocation = "UIATarget.localTarget().frontMostApp().windows()[3].pickers()[0].elements()[0]"
By pickerWheelBy = MobileBy.IosUIAutomation(pickerWheelLocation)
IOSElement pickerWheel = WebDriverHelper.getDriver().findElement(pickerWheelBy);
pickerWheel.sendKeys("New Value");
IOSElement doneButton = WebDriverHelper.getDriver().findElement(MobileBy.IosUIAutomation("UIATarget.localTarget().frontMostApp().windows()[2].toolbars()[0].buttons()["Done"]"));
doneButton.click();
Upvotes: 0
Reputation: 3273
while(monthWheel.value() != "June"){
monthWheel.tapWithOptions({tapOffset:{x:0.5, y:0.33}});
target.delay(0.5);
}
value is not variable, it is a function so you should call value()
on month wheel like I used.
and tapWithOptions()
will take you to next row in the wheel.
Upvotes: 2
Reputation: 1
I would tap until my value is the one I want. Since the value set is 12 months, it'll roll around.
while(target.frontMostApp().mainWindow().pickers()[0].wheels()[0].value != "November"){
target.frontMostApp().mainWindow().pickers()[0].wheels()[0].tap();
}
Upvotes: 0