এক্সকোড ইউআই পরীক্ষা - ইউআই টেস্টিং ব্যর্থতা - অনুসন্ধান ক্ষেত্র "বাতিল করুন" বোতামে আলতো চাপলে দৃশ্যমান (এএক্স এক্স দ্বারা) স্ক্রোল করতে ব্যর্থ হয়েছে


85

আমি অনুসন্ধান বারে 'বাতিল' বোতামটি আলতো চাপ দিয়ে অনুসন্ধান ক্ষেত্রটি খারিজ করার চেষ্টা করছি।

পরীক্ষার কেস বাতিল বোতামটি খুঁজে পেতে ব্যর্থ। এটি এক্সকোড 7.0.1 এ সূক্ষ্মভাবে কাজ করছিল

আমি বোতামটি উপস্থিত হওয়ার জন্য অপেক্ষা করতে প্রিকিকেট যুক্ত করেছি। পরীক্ষার কেসটি ব্যর্থ হয় যখন আমরা "বাতিল" বোতামটি টেপ করি

let button = app.buttons[“Cancel”]
let existsPredicate = NSPredicate(format: "exists == 1")

expectationForPredicate(existsPredicate, evaluatedWithObject: button, handler: nil)
waitForExpectationsWithTimeout(5, handler: nil)

button.tap() // Failing here

লগগুলি :

    t =     7.21s     Tap SearchField
t =     7.21s         Wait for app to idle
t =     7.29s         Find the SearchField
t =     7.29s             Snapshot accessibility hierarchy for com.test.mail
t =     7.49s             Find: Descendants matching type SearchField
t =     7.49s             Find: Element at index 0
t =     7.49s             Wait for app to idle
t =     7.55s         Synthesize event
t =     7.84s         Wait for app to idle
t =     8.97s     Type 'vinayak@xmd.net' into
t =     8.97s         Wait for app to idle
t =     9.03s         Find the "Search" SearchField
t =     9.03s             Snapshot accessibility hierarchy for com.test.mail
t =     9.35s             Find: Descendants matching type SearchField
t =     9.35s             Find: Element at index 0
t =     9.36s             Wait for app to idle
t =     9.42s         Synthesize event
t =    10.37s         Wait for app to idle
t =    10.44s     Check predicate `exists == 1` against object `"Cancel" Button`
t =    10.44s         Snapshot accessibility hierarchy for com.test.mail
t =    10.58s         Find: Descendants matching type Button
t =    10.58s         Find: Elements matching predicate '"Cancel" IN identifiers'
t =    10.58s     Tap "Cancel" Button
t =    10.58s         Wait for app to idle
t =    10.64s         Find the "Cancel" Button
t =    10.64s             Snapshot accessibility hierarchy for com.test.mail
t =    10.78s             Find: Descendants matching type Button
t =    10.78s             Find: Elements matching predicate '"Cancel" IN identifiers'
t =    10.79s             Wait for app to idle
t =    11.08s         Synthesize event
t =    11.13s             Scroll element to visible
t =    11.14s             Assertion Failure: UI Testing Failure - Failed to scroll to visible (by AX action) Button 0x7f7fcaebde40: traits: 8589934593, {{353.0, 26.0}, {53.0, 30.0}}, label: 'Cancel', error: Error -25204 performing AXAction 2003

@ জো মাসিলোটি কোন ধারণা?
ভিনপাই

কেবল একটি স্যানিটি পরীক্ষা, তবে কি স্ক্রিনের বাতিল বোতামটি নাকি এটিকে স্ক্রোল করা দরকার? আমি জানি যে এখনও কিছু বিষয় রয়েছে যেখানে উপাদানগুলিতে স্ক্রোলিং সবসময় কাজ করে না।
জো মাসিলোটি

@ জোমাসিলোটি বাতিল বোতামটি স্ক্রিনে রয়েছে। বাতিল বোতামটি সিস্টেম ডিফল্ট বোতাম যা ইউআইএসবারবারের অংশ। এক্সকোড 7.০.১-এ এটি ঠিকঠাক কাজ করছিল যখন আমি [সেল্ফ.বটনগুলি [@ "বাতিল"] ট্যাপ] করলাম;
Vinpai

4
@ ভিনপাই আপনি যখন app.tables.cells.allElementsBoundByAccessibilityElement.countবোতামটি ট্যাপ করার আগে একটি যুক্ত করেন তখন কী হয় ? কেবল কৌতূহলী - এটি আমার জন্য মাঝে মাঝে স্ক্রিনটি 'রিফ্রেশ' করতে সহায়তা করেছে।
কেক 88

@ কননর, আপনার প্রস্তাবিত এপিআই দিয়ে চেষ্টা করেছি, কিন্তু বাতিল বোতামটি ট্যাপ করার সময় এটি ব্যর্থ হয়। আমি যখন ডিবাগ-এ অ্যাপ্লিকেশন.বাটনগুলি জিজ্ঞাসা করি তখন এটি বাতিল বোতামটি
দেখায়

উত্তর:


140

আমি অনুমান করি এখানে "বাতিল করুন" বোতামটি সম্পত্তির falseজন্য ফিরে আসে hittable, এটি এটিকে আলতো চাপানো থেকে বিরত রাখে।

আপনি যদি tap()ডকুমেন্টেশনে দেখেন তবে এটি বলে

/*!
 * Sends a tap event to a hittable point computed for the element.
 */
- (void)tap;

দেখে মনে হচ্ছে এক্সকোড .1.১ দিয়ে জিনিসগুলি নষ্ট হয়ে গেছে myself এই সমস্যাগুলি থেকে নিজেকে (এবং আপনিও;) অবরুদ্ধ রাখার জন্য আমি একটি এক্সটেনশন লিখেছিলাম XCUIElementযাতে এটি হিটটেবল না হলেও উপাদানটিতে আলতো চাপতে দেয়। নিম্নলিখিত আপনাকে সাহায্য করতে পারে।

/*Sends a tap event to a hittable/unhittable element.*/
extension XCUIElement {
    func forceTapElement() {
        if self.hittable {
            self.tap()
        }
        else {
            let coordinate: XCUICoordinate = self.coordinateWithNormalizedOffset(CGVectorMake(0.0, 0.0))
            coordinate.tap()
        }
    }
}

এখন আপনি হিসাবে কল করতে পারেন

button.forceTapElement()

আপডেট - দ্রুত 3 ব্যবহারের জন্য নিম্নলিখিত:

extension XCUIElement {
    func forceTapElement() {
        if self.isHittable {
            self.tap()
        }
        else {
            let coordinate: XCUICoordinate = self.coordinate(withNormalizedOffset: CGVector(dx:0.0, dy:0.0))
            coordinate.tap()
        }
    }
}

ঠিক করার জন্য ধন্যবাদ। আমি একই ধরণের সমস্যার মুখোমুখি হয়েছি cell.tap()এবং এটি এটি ঠিক করেছে। Xcode7.1-এ কিছু পরিবর্তিত হয়েছে বলে মনে হচ্ছে যার ফলে কিছু উপাদান আর আঘাত হারাতে পারে না
ফ্রেঞ্চিসউপ

আমার কাছে একটি কাস্টম নেভিগেশন বার ব্যাকবটন আইটেম রয়েছে যা Xcode7.1 এ 'হিট টেবিল' নয় এবং এই সমাধানটি আমার পক্ষে কাজ করেself.app.navigationBars["Nav Title"].staticTexts["Custom Back Btn Title"].forceTapElement()
অ্যালেক্স

ধন্যবাদ - আমার একই ইস্যুটির জন্য কাজ করেছি।
টাচে

7
আমার ক্ষেত্রে এটি টেপটি যখন দেখার কেন্দ্রে থাকে তখন কাজ করে। অফসেটটি পরিবর্তন করুন (0.5, 0.5) 0.5 let coordinate: XCUICoordinate = self.coordinateWithNormalizedOffset(CGVectorMake(0.5, 0.5))
গ্রাহাম পার্কস

4
মহান কাজ. এটি দেখার আগে আমি প্রায় আমার ম্যাকবুকটি হত্যা শুরু করেছিলাম।
কেওসস্পিডার

11

আমার জন্য, মূল কারণটি হ'ল আমি যে বস্তুগুলিতে ট্যাপ করতে চাইছিলাম

  • গোপনে সেট করা হয়েছে (এবং পিছনে)
  • সরানো হয়েছে এবং পুনরায় সংযুক্ত করা হয়েছে

উভয় ক্ষেত্রে isAccessibilityElement সম্পত্তি falseপরে ছিল । এটি trueস্থির করে এটিকে আবার সেট করা ।


4
এটা ঠিক আমার সমস্যা ছিল। অদ্ভুতভাবে, এটি আইওএস 11 এ ঘটতে শুরু করে (এটি আইওএস 10 এ ঠিক কাজ করে)।
রিকার্ডো সানচেজ-সায়েজ

4

"দর্শনের কাছে স্ক্রোল করতে ব্যর্থ (এএক্স ক্রিয়া দ্বারা) বোতাম" শব্দটির চারপাশে এই প্রশ্নটি গুগলের প্রশ্নের পক্ষে ভাল । প্রশ্নের বয়স বিবেচনা করে আমি ভেবেছিলাম যে এটি XCUITest কাঠামোর সাথে আর গ্রহণযোগ্য উত্তর হিসাবে প্রস্তাবিত হবে না।

আমি দেখতে পেয়েছি যে এই সমস্যাটি XCElementবিদ্যমান থাকার কারণে , তবে সফ্টওয়্যার কীবোর্ডের আড়ালে রয়েছে। ফ্রেম ফ্রেম দ্বারা ত্রুটিটি নির্গত হয় যেহেতু এটি টেপযোগ্য হওয়ার দৃষ্টিতে বিদ্যমান কোনও দৃশ্য স্ক্রোল করতে অক্ষম। আমার ক্ষেত্রে কখনও কখনও সফ্টওয়্যার কীবোর্ডের পিছনে প্রশ্নে থাকা বোতামটি ছিল ।

আমি পেয়েছি আইওএস সিমুলেটারের সফ্টওয়্যার কীবোর্ডটি কিছু ক্ষেত্রে (যেমন: আপনার মেশিনে) টগলড হয়ে থাকতে পারে এবং অন্যগুলিতে টগলড থাকতে পারে (যেমন: আপনার সিআই তে)। আমার ক্ষেত্রে আমি একটি মেশিনে সফটওয়্যার কীবোর্ডটি টগল করেছিলাম এবং ডিফল্টরূপে এটি অন্যের উপরে টগল করা হয়েছিল।

সমাধান: এর পিছনে থাকা বোতামগুলি ট্যাপ করার চেষ্টা করার আগে কীবোর্ডটি খারিজ করুন।

আমি কোথাও ট্যাপিং পেয়েছি যা বোতামে আলতো চাপার আগে কীবোর্ডটি স্পষ্টভাবে বাতিল করে দিয়েছিল সমস্ত পরিবেশে আমার সমস্যা সমাধান করেছে।

আমি যুক্ত করেছি যে বর্তমান প্রতিক্রিয়াশীলকে ফার্স্টরেসপন্ডার থেকে পদত্যাগ করতে কিছু পদক্ষেপ যুক্ত করব। আমার পাঠ্য দর্শনের পিছনে মতামতগুলি প্রথম প্রতিক্রিয়াকারীকে পদত্যাগ করতে বাধ্য করবে, তাই আমি সর্বশেষ পাঠ্য ক্ষেত্রের নীচে কোথাও ট্যাপ করব।

 /// The keyboard may be up, dismiss it by tapping just below the password field
let pointBelowPassword = passwordSecureTextField.coordinate(withNormalizedOffset: CGVector(dx: 0.5, dy: 1))
pointBelowPassword.press(forDuration: 0.1)

2

দয়া করে উপাদানটির বৈশিষ্ট্যটি পরীক্ষা করে দেখুন, আমি টেবিলভিউসেকশনহাইডারের সাথে একই সমস্যার মুখোমুখি হয়েছি, আমি ট্যাপ দেওয়ার চেষ্টা করছিলাম তবে এটি প্রতিটি পয়েন্টে ব্যর্থ হয়েছিল was

এখানে চিত্র বর্ণনা লিখুন


1

স্যান্ডির কাজটি কিছুক্ষণের জন্য সাহায্য বলে মনে হয়েছিল তবে তার আর কোনও দরকার নেই - আমি এরপরে এটিকে এভাবে পরিবর্তন করেছি:

func waitAndForceTap(timeout: UInt32 = 5000) {
    XCTAssert(waitForElement(timeout: timeout))
    coordinate(withNormalizedOffset: CGVector(dx:0.5, dy:0.5)).tap()
}

মূল বিষয়টি হ'ল সমস্যাটি হিট হিট চেক একটি ব্যতিক্রম ছুঁড়েছে, আমি এই চেকটি মোটেও করি না এবং উপাদানটি সন্ধানের পরে সরাসরি স্থানাঙ্কের জন্য যাই না।


0

আমার ক্ষেত্রে এটিতে একটি প্রোগ্রামক্রমে বোতামটি elementেকে থাকা ইউআই উপাদান যুক্ত হয়েছিল।


0

যদি আপনি পরীক্ষা চালানোর জন্য অ্যাপকেন্দ্র সিমুলেটর ব্যবহার করেন তবে আপনার অবশ্যই এটি নিশ্চিত করা উচিত যে আপনি স্থানীয় সিমুলেটারের চেয়ে একই ডিভাইস সংস্করণে পরীক্ষা চালাচ্ছেন। আমি এই কারণে 3 দিন কাজ হারিয়েছি।


0

আপনার উপাদানটি কভার করতে পারে এমন আত্মার মধ্যে, আমি আমার আইকনের উপরে আরএন ডিবাগারটি আংশিকভাবে ওভারলেড করেছি:

এখানে চিত্র বর্ণনা লিখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.