প্রটেক্টর জন্য ডকুমেন্টেশনে, আমি নিম্নলিখিত উদাহরণটি দেখতে পাচ্ছি:
describe('by model', function() {
it('should find an element by text input model', function() {
var username = element(by.model('username'));
username.clear();
username.sendKeys('Jane Doe');
var name = element(by.binding('username'));
expect(name.getText()).toEqual('Jane Doe');
});
এখানে যা পরিষ্কার দেখা যাচ্ছে তা হ'ল আপনি একটি ইনপুট বাক্সে মানগুলি সেট করতে "বাই.মডেল" ব্যবহার করতে পারেন তবে আপনি যদি একটি ইনপুট বাক্সটি দেখতে চান এবং এতে কী দেখতে চান তবে আপনাকে "বাই বাইন্ডিং" ব্যবহার করতে হবে।
আমার কোডের একটি সেট রয়েছে যেখানে (সংক্ষেপে) আমি করি:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.model('risk.name')).getText()).toEqual('A value');
(আমার আসল কোডে আমি সত্তাটি সংরক্ষণ করি তারপরে সম্পাদনা মোডে এটিতে ফিরে আসি এবং আমি আমার মানটি যাচাই করেছিলাম যাচাই করে নিচ্ছি But তবে এটি এখনও একই জিনিসটিতে ফোটে এবং এই নমুনা কোডটি একই সমস্যা দেয়)।
এটি আমাকে একটি ত্রুটি দেয়:
Error: Expected '' to equal 'A value'.
তত্ত্বের ক্ষেত্রে, ডক্সের উদাহরণ অনুসরণ করে আমি এর পরিবর্তে করতে পারি:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.binding('risk.name)).getText()).toEqual('A value');
তবে বাই বাইন্ডিং সম্পূর্ণরূপে যোগ্যতাসম্পন্ন মডেলটিকে পছন্দ করে না বলে আমি একটি ত্রুটি পেয়েছি:
Error: No element found using locator: by.binding("risk.name")
এটি কাজ করে (একটি ফ্যাশনের পরে) যদি আমি করি:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.binding('name')).getText()).toEqual('A value');
এটি একটি উপাদান সন্ধান করে তবে একটি সতর্কতা দেয় যে আমার কাছে একাধিক উপাদান রয়েছে যা 'নামের সাথে মেলে।' এবং দুর্ভাগ্যক্রমে এটি যা বেছে নেয় তা সঠিক নয়।
সুতরাং, দুটি প্রশ্ন:
- বাই.মোডেলটি কি getText () ফিরিয়ে দিতে সক্ষম হবে, বা এমন কোনও ডিজাইনের সিদ্ধান্ত আছে যা এটি না করে এবং এর পরিবর্তে আমাদের বাই বাইন্ডিং ব্যবহার করা দরকার?
- বাই বাইন্ডিংয়ে কি আমি একটি সম্পূর্ণ যোগ্য সত্তা ব্যবহার করতে সক্ষম হব, বা এমন কোনও ডিজাইনের সিদ্ধান্ত আছে যা বাই-বাইন্ডিং পুরো মডেলের নাম পছন্দ করে না? যদি তা হয় তবে আমার বিভিন্ন বাইন্ডিংয়ের মধ্যে আমি অন্য কোয়ালিফায়ারটি ব্যবহার করতে পারি?
সম্পাদনা করুন:
আমি vdrulerz দ্বারা প্রস্তাবিত সমাধানটিও চেষ্টা করেছি, আমি কোডটি নিম্নরূপে সংশোধন করেছি:
element(by.model('risk.name')).getText().then(function(text) {
console.log(text);
expect(text).toEqual('A risk name');
});
কনসোল.লগ একটি ফাঁকা মান (প্রতিশ্রুতি বা কোনও বস্তু নয়) ফিরিয়ে দিচ্ছে, এবং প্রত্যাশা বার্তাটি দিতে ব্যর্থ হয়:
Expected '' to equal 'A risk name'.
আমার বোধগম্যতা হল যে প্রটেক্টর ইতিমধ্যে প্রতিশ্রুতিটি মোকাবেলা করার প্রত্যাশাকে প্যাচ করে, তাই আমি অনুভব করি যে অন্তর্নিহিত সমস্যাটি গেইটেক্সট একটি মডেলের মাধ্যমে চিহ্নিত ক্ষেত্রটিতে কাজ না করা (আমি সফলভাবে লেবেল এবং অন্যান্য উইজেটগুলিতে টেক্সট পেতে পারি)।
আমি getText () এর পরিবর্তে getAttribute ব্যবহার করে নিম্নলিখিত কোডটি চালাতে পারি:
expect(element(by.model('risk.name')).getAttribute('autofocus')).toEqual('true');
element(by.model('risk.name')).getAttribute('autofocus').then(function(text) {
console.log(text);
expect(text).toEqual('true');
});
প্রথম অংশটি পাস - প্রত্যাশার কাজ করে। দ্বিতীয় অংশটিও কাজ করে, যা vdrulerz 'সিনট্যাক্সটিও বৈধ, এবং এটি কনসোলে' সত্য 'লগ করে। আমি মনে করি getText এর সাথে সম্ভাব্য কোনও ত্রুটি আছে?