问题
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.
回答1:
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.
回答2:
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.
回答3:
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();
}
回答4:
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:
- get your picker element (tag name: picker)
- get all the wheels for that picker (tag name: pickerwheel)
- you can list values for that wheel by doing element.getAttribute("values")
- you can set the value by doing element.setValue(myNewValue)
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();
回答5:
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]);
来源:https://stackoverflow.com/questions/8301776/uiapickerwheel-selectvalue-not-working-for-text-values-within-uidatepicker