प्रोट्रैक्टर के लिए प्रलेखन में, मैं निम्नलिखित उदाहरण देखता हूं:
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');
});
यहाँ जो स्पष्ट दिखाई देता है वह यह है कि आप "by.model" का उपयोग इनपुट बॉक्स में मान सेट करने के लिए कर सकते हैं, लेकिन यदि आप इनपुट बॉक्स को देखना चाहते हैं और देखना चाहते हैं कि आपको "by.binding" का उपयोग करने की आवश्यकता है।
मेरे पास कोड का एक सेट है जहां (संक्षेप में) मैं करता हूं:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.model('risk.name')).getText()).toEqual('A value');
(अपने वास्तविक कोड में मैं इकाई को सहेजता हूं, फिर इसे संपादित मोड में वापस आता हूं, और मैं अपने मूल्य की जांच कर रहा हूं वास्तव में सहेजा गया था। लेकिन यह अभी भी उसी चीज को उबालता है, और यह नमूना कोड समान समस्या देता है)।
यह मुझे एक त्रुटि देता है:
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');
यह एक तत्व ढूंढता है, लेकिन यह चेतावनी भी देता है कि मेरे पास एक से अधिक तत्व हैं जो 'नाम' से मेल खाते हैं। और दुर्भाग्य से जो इसे चुनता है वह सही नहीं है।
तो, दो सवाल:
- क्या by.model एक getText () को वापस करने में सक्षम होना चाहिए, या क्या कोई डिज़ाइन निर्णय है जो ऐसा नहीं करता है और हमें इसके बजाय by.binding का उपयोग करने की आवश्यकता है?
- क्या मुझे बाइंडिंग में पूरी तरह से योग्य इकाई का उपयोग करने में सक्षम होना चाहिए, या क्या कोई डिज़ाइन निर्णय है जो बाइंडिंग पूर्ण मॉडल नाम को पसंद नहीं करता है? यदि हां, तो मैं अपने अलग-अलग बाइंडिंग के बीच चयन करने के लिए किस अन्य क्वालीफायर का उपयोग कर सकता हूं?
संपादित करें:
मैंने 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 'वाक्यविन्यास भी मान्य है, और यह कंसोल में' सही 'लॉग करता है। मुझे लगता है कि गेटटेक्स्ट के साथ संभवतः एक दोष है?