ম্যাচগুলি (isdisplayed ()) NoMatchingViewException এর সাথে ব্যর্থ হয়


87

আমি ইউআই ভিউয়ের অনুপস্থিতি পরীক্ষা করার চেষ্টা করছি। ভিউ সিলেক্টর নিম্নরূপ:

public static ViewInteraction onMyTestUi() {
    return onView(withId(R.id.myTestId));
}

নির্বাচক দর্শন প্রদর্শন করা হয়েছে কিনা তা যাচাই করার জন্য সূক্ষ্মভাবে কাজ করে, তবে ভিউটি প্রদর্শিত না হয় কিনা তা পরীক্ষা করতে ত্রুটি দেয়। আমি এটি নিম্নলিখিত হিসাবে ব্যবহার করছি:

 onMyTestUi().check(matches(not(isDisplayed())));

তবে আমি নিম্নলিখিত ত্রুটি পেয়েছি:

com.google.android.apps.common.testing.ui.espresso.NoMatchingViewException: হায়ারার্কিতে কোনও মতামত মিলেছে না: আইডির সাথে: লক্ষ্য লক্ষ্যটি যদি ভিউ হায়ারার্কির অংশ না হয় তবে আপনাকে এসপ্রেস.অনডেটা ব্যবহার করতে হতে পারে নিম্নলিখিত অ্যাডাপ্টারভিউ থেকে এটি লোড করুন: android.widget.ListView V ...}

এটা অদ্ভুত. আমি ইউআইয়ের অনুপস্থিতি এবং এটির প্রত্যাশা নিয়ে পরীক্ষা করে দেখছি যে এই দর্শনটি পাওয়া যাবে না। তাহলে এস্প্রেসো ত্রুটি ছুঁড়ে ফেলছে কেন? এখানে ভুল হতে পারে কি দয়া করে পরামর্শ দিন।

ধন্যবাদ, অবাক!

উত্তর:


166

doesNotExist()পরিবর্তে ব্যবহার করা প্রয়োজন। এখানে পাওয়া গেছে

যদি ভিউটি ভিউ হায়ারার্কিতে থাকে তবে অদৃশ্য অবস্থায় থাকে (দৃশ্যমানতাটি 'ইনভিজিবল' তে সেট করা থাকে), ব্যবহার করুন not(isDisplayed)। যাইহোক, যদি ভিউ হায়ারার্কিতে ভিউটি একেবারেই না থাকে (উদাহরণস্বরূপ 'GONE' এ দৃশ্যমানতা সেট করা হয়), doesNotExist()ব্যবহৃত হয়।


17
এটি আমার পক্ষে কাজ করে না, onView(withId(R.id.myTestId)).check(matches(not(isDisplayed())));কাজ করে।
সিথু

37
@ সিথু-এটি অ্যাপের উপর নির্ভর করে। আপনি যে ভিউটির সন্ধান করছেন তা যদি ভিউ রাইন্ডার্কিটিতে থাকে তবে অদৃশ্য হয়, তবে আপনাকে (isDisplayed) ব্যবহার করা উচিত নয়। যাইহোক, যদি ভিউ শ্রেনীর মধ্যে ভিউ না থাকে তবে আপনাকে doNotExist () ব্যবহার করতে হবে।
ব্যবহারকারী 846316

4
আমি বিন্যাস বোতাম কিন্তু সেট দৃশ্যমানতা আছে View.GONEমধ্যে onCreateব্যবহারকারী ভূমিকা উপর। সুতরাং, এর অর্থ কি এটি হায়ারার্কি এবং অদৃশ্য দৃষ্টিতে রয়েছে?
সিথু

হ্যাঁ! এর জন্য ধন্যবাদ, সুপার আমার সমস্যার সমাধান করেছে, এবং আমার সকালকে আরও ভাল করে তুলেছেন (এই সমস্যাটি নিয়ে বিছানায় গিয়েছিলেন)।
বুগার

যদি ভিউটি হায়ারার্কি থেকে চলে যায় - যখন কোনও ক্রিয়াকলাপ অন্য ক্রিয়াকলাপে স্থানান্তরিত করতে পারে তখন ঘটতে পারে - আপনার ভিউএসারেশন.ডোস নটএক্সিস্ট () ব্যবহার করা উচিত: আপনার উদাহরণে দেখুন.গোন উদাহরণটি ভুল এবং বিভ্রান্তিকর। দয়া করে আপনার উত্তরটি সম্পাদনা করুন
মেটিস

18

আপনার পদ্ধতিতেও কাজ করুন তবে এর মতো কিছু:

onView(withId(R.id.next)).check(matches(not(isDisplayed())));

15
onView(withText("")).check(doesNotExist());

4
এটি একটি আংশিক সঠিক উত্তর। এটি কেবল তখনই কাজ করবে যখন টার্গেটেট ভিউ লেআউটে উপস্থিত না থাকে (ভিউ হায়ারার্কি এই ভিউটি ধারণ করে না)) তবে লক্ষ্য নির্ধারণ লেআউট ভিউয়ের স্তরক্রমের মধ্যে যদি বাস্তবে উপস্থিত থাকে তবে এই দৃser়তা ব্যর্থ হবে তবে এর দৃশ্যমান অবস্থাটি GONE বা INVISIBLE হয়। সেক্ষেত্রে দৃ failure়তার সাথে ব্যর্থতার বার্তাটি উল্লেখ করবে:android.support.test.espresso.base.DefaultFailureHandler$AssertionFailedWithCauseError: View is present in the hierarchy...
সাইমন-ড্রয়েড

সঠিক, সুতরাং আমি মনে করি আপনি ত্রুটি বার্তাটি বিশদ দর্শন শ্রেণিবদ্ধের সাথে পরীক্ষা করতে পারেন।
অলিভিয়া লিয়াও

8

আপনি চেক করতে চান যদি Viewপারেন হয় দৃশ্যমান নয় বা কোন অস্তিত্ব নেই

public static ViewAssertion isNotDisplayed() {
    return new ViewAssertion() {
        @Override
        public void check(View view, NoMatchingViewException noView) {
            if (view != null && isDisplayed().matches(view)) {
                throw new AssertionError("View is present in the hierarchy and Displayed: "
                        + HumanReadables.describe(view));
            }
        }
    };
}

ব্যবহার:

onView(withId(R.id.someView)).check(isNotDisplayed());

এর জন্য ধন্যবাদ - আইএমএইচও এটি কোনও সাধারণীকরণের জন্য "ভিউ স্ক্রিন থেকে চলে গেছে কিনা তা পরীক্ষা করে নেওয়ার জন্য সেরা সমাধান"। একটি সংশোধন, যদিও: আইএমই, এর ব্যবহারটি হলonView(withId(R.id.someView)).check(isNotDisplayed());
স্ট্রিং

4

যদি আপনি "কার্যকর দক্ষতার সাথে" দৃশ্যের দৃশ্যমানতাটি পরীক্ষা করেন তবে আপনি এই বিকল্পটি ব্যবহার করতে পারেন

    onViewWithId(R.id.YOURVIEW).check(matches(ViewMatchers.withEffectiveVisibility(ViewMatchers.Visibility.GONE)))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.