Xcode में iOS UI परीक्षण में पिकर व्यू आइटम का चयन कैसे करें?




swift xctest (6)

मेरे पास कुछ वस्तुओं के साथ एक पिकर दृश्य है: "रेड", "ग्रीन", "येलो", "ब्लैक"। मेरे UI परीक्षण में मुझे एक विशिष्ट आइटम "ग्रीन" से चुनने की आवश्यकता है। मैं XCTest UI परीक्षण API का उपयोग कर रहा हूं जो Xcode 7 के साथ घुसपैठ किए गए थे।

अब तक मैं जो भी करने में कामयाब रहा, वह यूनिट टेस्ट में पूरे पिकर व्यू को स्वाइप करना है। यह आदर्श नहीं है क्योंकि यह हमेशा बीनने वाले दृश्य को नीचे की वस्तु में बदलता है (जब ऊपर स्वाइप करता है)।

let app = XCUIApplication()
app.launch()
app.pickers.elementAtIndex(0).swipeUp()    
XCTAssert(app.staticTexts["Selected: Black"].exists)

बीनने के दृश्य को बदलने का एक और लेकिन समान तरीका pressForDuration ... thenDragToElement को कॉल pressForDuration ... thenDragToElement , जो कि मैं नहीं चाहता हूं।

app.pickers.elementAtIndex(0).pressForDuration(0.1, thenDragToElement: someElement)

जब मैं UI परीक्षण रिकॉर्ड फ़ंक्शन का उपयोग करता हूं तो यह पिकर व्यू स्क्रॉलिंग घटनाओं को रिकॉर्ड नहीं करता है। जब मैं पिकर व्यू आइटम पर टैप करता हूं तो यह रिकॉर्ड करता है:

app.pickerWheels["Green"].tap()

लेकिन यह वास्तव में काम नहीं करता है जब परीक्षण चलाया जाता है (शायद इसलिए कि इसे टैप करने से पहले पिकर दृश्य को स्क्रॉल करना होगा)।

यहाँ परीक्षण के साथ डेमो ऐप है।

https://github.com/exchangegroup/PickerViewTestDemo

अद्यतन करें

Xcode 7.0 बीटा 6 के बाद से पिकर व्यू का चयन करना अब संभव है।

app.pickerWheels["Green"].adjustToPickerWheelValue("Yellow")

पिकर व्हील में अब प्रदर्शित तत्व की पहचान करने के लिए मैंने नीचे दिए गए कोड का उपयोग किया।

पिकर में एक तत्व खोजने के लिए

let valueSelected = algorithmsPicker.pickerWheels.element(boundBy: 0).value as! String

पिकर व्हील में एक मान का चयन करने के लिए:

 algorithmsPicker.pickerWheels[valueSelected].adjust(toPickerWheelValue: "BubbleSort")

@Joao_dche के जवाब का 4 संस्करण स्विफ्ट

app.pickerWheels.element(boundBy: 0).adjust(toPickerWheelValue: "March")
app.pickerWheels.element(boundBy: 1).adjust(toPickerWheelValue: "13")
app.pickerWheels.element(boundBy: 2).adjust(toPickerWheelValue: "1990")

IOS 11 पर जो का जवाब शानदार काम कर रहा है, लेकिन मेरे लिए iOS 10.3.1 [Xcode 9.2] पर काम नहीं करता है।

मैं बीनने वाली पंक्तियों के रूप में कस्टम दृश्य (लेबल वास्तव में) का उपयोग करता हूं और दुर्भाग्य से बहुत सुंदर है जो का जवाब मेरे लिए iOS 10.3.1 पर पूरी तरह से iOS 11 पर काम करते समय काम नहीं करता है । इसलिए मुझे इसका उपयोग करना पड़ा

app.pickerWheels["X, Y of Z"].swipeUp()

कहा पे

X is my label's text.
Y is row position in picker view. Position number starts with 1, not zero.
Z is number of values in picker view.

तो मेरे मामले में यह कमांड जैसा दिखता है

app.pickerWheels["1st, 1 of 28"].swipeUp()

जैसा कि सवाल के अद्यतन में उल्लेख किया गया है, एक्सकोड 7 बीटा 6 ने पिकर के साथ बातचीत के लिए समर्थन जोड़ा। नई जोड़ी गई विधि -adjustToPickerWheelValue: UIPickerView पर आइटम का चयन करने के लिए उपयोग किया जाना चाहिए।

let app = XCUIApplication()
app.launch()
app.pickerWheels.element.adjustToPickerWheelValue("Yellow")

यहाँ एक GitHub रेपो एक कार्यशील उदाहरण के साथ है । और कुछ और जानकारी जो मैंने ब्लॉग पोस्ट में लिखी है


यदि कई पहिए हैं, तो इस तरह से आइटम का चयन करने का एक आसान तरीका है:

पूर्व शर्त: यह एक तारीख पिकर (UIDatePicker), तेज भाषा है

    app.pickerWheels.elementBoundByIndex(0).adjustToPickerWheelValue("March")
    app.pickerWheels.elementBoundByIndex(1).adjustToPickerWheelValue("13")
    app.pickerWheels.elementBoundByIndex(2).adjustToPickerWheelValue("1990")

कहाँ: सूचकांक "0" महीना है, "1" दिन है, "2" वर्ष है


@Joao_dche के उत्तर का उद्देश्य-सी संस्करण

UI परीक्षण के लिए XCTest के साथ UIDatePicker का उपयोग करना:

    XCUIElementQuery *datePickersQuery = app.datePickers;
    [datePickersQuery.pickerWheels.allElementsBoundByIndex[0] adjustToPickerWheelValue:@"May"];
    [datePickersQuery.pickerWheels.allElementsBoundByIndex[1] adjustToPickerWheelValue:@"13"];
    [datePickersQuery.pickerWheels.allElementsBoundByIndex[2] adjustToPickerWheelValue:@"2017"];

    XCUIElement *doneButton = app.buttons[@"Done"];
    [doneButton.firstMatch tap];




xcode-ui-testing