आप तत्वों को कैसे नाम देते हैं
तत्वों की पहचान करने के लिए सीएसएस आईडी या कक्षा का उपयोग करें। जब वस्तु अद्वितीय हो तो सीएसएस आईडी का उपयोग करें। उदाहरण के लिए आप जिस फ्रेमवर्क का उपयोग कर रहे हैं, उदाहरण के लिए रूबी ऑन रेल्स के साथ name
विशेषता को स्वचालित रूप से असाइन किया गया है और (गैर-सहज रूप से) सीएसएस आईडी या क्लास का उपयोग करने से बेहतर हो सकता है
आप तत्वों की पहचान कैसे करते हैं।
स्थिति के पहचानकर्ताओं से बचें table/tr/td/td
जैसे कि रूपों के पक्ष में td[id="main_vehicle"
या जैसे td[class='alternates']
। उपयुक्त होने पर डेटा विशेषताओं का उपयोग करने पर विचार करें। इससे भी बेहतर है कि लेआउट टैग से बचने की कोशिश करें, जैसे <td>
कि ऊपर के लिए आप या तो एक स्पैन जोड़ सकते हैं और इसका उपयोग कर सकते हैं, जैसे कि <span id="main_vehicle">
या वाइल्डकार्ड चयनकर्ता जैसे कि *[id="main_vehicle"]
जहां *
अब डिव, स्पैन, td, आदि हो सकते हैं।
परीक्षण विशिष्ट डेटा विशेषताओं का उपयोग करना जो केवल क्यूए और परीक्षण के लिए उपयोग किए जाते हैं।
तत्वों के लिए अनावश्यक योग्यता से बचें। आप निम्नलिखित का उपयोग करके खुद को पा सकते हैं:
body.main div#vehicles > form#vehicle input#primary_vehicle_name
हालाँकि इसके लिए उस इनपुट फ़ील्ड की आवश्यकता होती है, जो वाहन की सटीक आईडी के साथ और पृष्ठ पर एक शरीर के साथ रहती है, जिसमें मुख्य वर्ग और वाहनों की आईडी के साथ एक div है, जिसमें एक आईडी के साथ एक फार्म का तत्काल बच्चा है वाहन। उस संरचना में कोई भी परिवर्तन और परीक्षण टूट जाता है। इस मामले में आपको मिल सकता है
input#primary_vehicle_name
तत्व को विशिष्ट रूप से पहचानने के लिए पर्याप्त है।
उन परीक्षणों से बचें जो दृश्यमान पाठ को संदर्भित करते हैं। उपयोगकर्ता को दिखाए जाने वाले पृष्ठ पर पाठ आमतौर पर साइट के रखरखाव और अद्यतन के रूप में समय के साथ बदलता है, इसलिए सीएसएस आईडी और सीएसएस वर्ग या डेटा विशेषताओं जैसे पहचानकर्ताओं का उपयोग करें। तत्व जैसे कि form
, input
और select
प्रपत्रों में उपयोग किए जाने वाले तत्व पहचान करने के अच्छे भाग भी हैं, आमतौर पर आईडी या वर्ग के साथ संयोजन में, उदाहरण के लिए li.vehicle
या input#first-vehicle
आप अपने स्वयं के पहचानकर्ता भी जोड़ सकते हैं, जैसे <div data-vehicle='dodge'>
। इस तरह आप तत्व आईडी या कक्षाओं का उपयोग करने से बच सकते हैं, जो डेवलपर्स और डिजाइनरों द्वारा बदले जाने की संभावना है। मैंने वास्तव में समय के साथ पाया है कि इसके डेवलपर्स और डिजाइनरों के साथ काम करने के लिए बेहतर है और नाम और स्कोप पर समझौता करने के लिए आते हैं। वह कठिन है।
निश्चित डेटा कैसे बनाए रखा जाता है।
वास्तविक तत्वों की पहचान करने के समान, पृष्ठ ऑब्जेक्ट के पक्ष में मूल्यों की पहचान करने वाले इन-लाइन हार्ड कोडित चयनकर्ता से बचने की कोशिश करें - पाठ के छोटे टुकड़े जो चर या विधियों में आयोजित किए जाते हैं और इस प्रकार उनका पुन: उपयोग किया जा सकता है और उन्हें केंद्र में भी बनाए रखा जा सकता है। हार्ड-कोडित मूल्यों के लिए इस पैटर्न के बाद जावास्क्रिप्ट चर के उदाहरण:
storedVars["eqv_auto_year"] = "2015";
storedVars["eqv_auto_make_1"] = "ALFA ROMEO";
storedVars["eqv_auto_make_2"] = "HONDA";`
सेलेनियम विकी और सेलेनियम डॉक्स में पेज ऑब्जेक्ट्स पर अधिक
डेवलपर्स के साथ संचार।
भले ही 'डेवलपर्स परिवर्तन करें और QA स्वचालन को तोड़ें' के संदर्भ में तकनीकी दृष्टिकोण एक वर्कफ़्लो समस्या है। आपको यह सुनिश्चित करने की आवश्यकता है कि: हर कोई एक ही टीम है; डेवलपर एक ही एकीकृत परीक्षण चलाते हैं; मानकों पर दोनों समूहों द्वारा सहमति व्यक्त की जाती है; किया की परिभाषा में चल रहा है और संभवतः यूआई परीक्षण को अपडेट करना शामिल है; डेवलपर्स और टेस्टर की जोड़ी परीक्षण योजनाओं पर है और दोनों टिकट ग्रूमिंग (यदि एगाइल कर रहे हैं) में भाग लेते हैं और ग्रूमिंग के भाग के रूप में यूआई परीक्षण के बारे में बात करते हैं। आपको यह सुनिश्चित करना चाहिए कि नामकरण के लिए आप जो भी दृष्टिकोण और रणनीति का उपयोग करते हैं, वह एप्लिकेशन डेवलपर्स के साथ समन्वित है। यदि आप उसी पृष्ठ पर नहीं आते हैं, तो आप ऑब्जेक्ट नामकरण पर टकराव चाहेंगे। पृष्ठ ऑब्जेक्ट के कुछ उदाहरण जो मैंने हाल ही में रूबी प्रोजेक्ट के लिए बनाए हैं:
def css_email_opt_in_true
'auto_policy[email_opt_in][value=1]'
end
def css_phone_opt_in
'*[name="auto_policy[phone_opt_in]"]'
end
def css_phone_opt_in_true
'input[name=phone_opt_in][value=true]'
end
def css_credit_rating
'auto_policy[credit_rating]'
end
यहाँ जावास्क्रिप्ट चर के समान पृष्ठ ऑब्जेक्ट हैं:
storedVars["css_email_opt_in"] = "css=*[name='auto_policy[email_opt_in]']";
storedVars["css_phone_opt_in"]="css=*[name='auto_policy[phone_opt_in]']";
storedVars["css_phone_opt_in_true"]="css=input[name='phone_opt_in'][value=true]";
storedVars["css_credit_rating"]="css=select[name='auto_policy[credit_rating]']";