जब अधिकांश वेबसाइटों (जहां यूआरएल का उपयोग किया जा सकता है) की बात आती है, तो मेरी राय में यह वही यूआरएल प्राप्त करने के लिए कार्रवाई के बजाय यूआरएल का उपयोग करने का सबसे अच्छा अभ्यास है।
उदाहरण के लिए:
# Suggested by OP:
driver = Selenium::Webdriver.for :chrome, prefs: prefs
homepage = Homepage.new(driver)
login = homepage.go_to_login
welcome = login.log_in_as('dave4429')
# My Suggestion:
homepage = Url.new('/')
login = Url.new('/login')
welcome = Url.new('/welcome')
इसका मतलब है कि आप के बजाय हर परीक्षा के लिए मुखपृष्ठ पर शुरू करने के लिए होने का एक यूआरएल से शुरू करते हैं। आपके पास अभी भी आपके द्वारा सुझाए गए तरीके होंगे, लेकिन यह सुनिश्चित करने के लिए कि उपयोगकर्ता यूआरएल के अलावा अन्य माध्यमों के माध्यम से पृष्ठ तक पहुंच सकते हैं, अन्य क्षेत्रों में उनका उपयोग किया जाएगा।
हालांकि, यह एक स्टॉप शॉप समाधान नहीं है। मोबाइल और डेस्कटॉप अनुप्रयोगों के साथ, आपका एकमात्र विकल्प होम स्क्रीन के माध्यम से जाना पड़ सकता है, इस मामले में, जिस विधि का आपने सुझाव दिया है वह निश्चित रूप से जाने वाला है।
"पेज ऑब्जेक्ट्स को कभी भी सत्यापन या दावे नहीं करना चाहिए। यह आपके परीक्षण का हिस्सा है और हमेशा परीक्षण के कोड में होना चाहिए, कभी भी पृष्ठ वस्तु में नहीं होना चाहिए।" - Selenium HQ
उदाहरण मैं एक बहुत ही बुनियादी एक था, और मैं सबसे अधिक संभावना इस तरह कोडिंग सक्षम करने के लिए मॉड्यूल और वर्गों में इन लपेट होगा, दिया:
google = Project::Pages::Google.new
google.search_for('Hello, World!')
expect(google.found_result?).to_equal(true)
संपादित
इसके अलावा, आपको एक गलत धारणा प्रतीत होती है कि कैसे ककड़ी गेरकिन के साथ काम करती है।
आपके पास प्रति चरण कोड की कई पंक्तियां हो सकती हैं, क्योंकि चरण स्वयं चरण के भीतर कार्यों का विवरण है।
उदाहरण के लिए:
Given I am logged in as "dave4429"
When I have submitted the "Contact Us" form with the following data:
| [email protected] | David McBlaine | I want to find out more about your Data Protection services, can I talk to a staff member or get a PDF? |
Then an email should be sent to "[email protected]" with the details specified
"जब" कुछ ऐसा दिखाई देगा के लिए परिभाषा:
When(/^I have submitted the "Contact Us" form with the following data:$/) do |table|
rows = table.raw
row = rows[0]
contact_us.fill_form({email: row[0], username: row[1], message: row[2]})
contact_us.submit_message
expect(browser.title).to_equal("Message Sent!")
end
यह सब आप कितना परिभाषा के दायरे में चरणों को तोड़ने पर निर्भर करता है।
# संपादित 2
यह भी मेरे लिए स्पष्ट है कि आप तकनीक है कि मैं का उपयोग करते समय विधि श्रृंखलन, contact_us.fill_form({email: row[0], username: row[1], message: row[2]}).submit_message
का रास्ता है, जो फिर से, सवाल से बाहर नहीं है में कुछ करना चाहता हूँ एम सुझाव दे रहा है, लेकिन यह सवाल यह है कि क्या यह श्रृंखला प्रत्येक व्यक्तिगत पृष्ठ के लिए होनी चाहिए, या क्या सब कुछ एक वर्ग या मॉड्यूल में शामिल किया जाना चाहिए, केवल आपकी ज़रूरतों का उत्तर दिया जा सकता है।
यह मेरी राय है कि यह एक वर्ग में बहुत अधिक डाल देगा, और उस वर्ग को तोड़ने से टेस्टर्स को अधिक नियंत्रण दिया जा सकता है, और कम अनावश्यक कोड लिखा जाएगा।
शायद यह अच्छा [पोस्ट] (http://thomassundberg.wordpress.com/2011/10/18/testing-a-web-plication-with-selenium-2/) आपकी मदद कर सकता है। – troig
यह एक महान पोस्ट है। केवल मामूली चिंता यह है कि चरणों के बीच पारित पृष्ठ वस्तुओं के उदाहरण तब नहीं रहेंगे जब कई चरण वर्गों का उपयोग किया जाता था। दुनिया/ओओटीबी निर्भरता इंजेक्शन का उपयोग करने से यह हल हो जाता है लेकिन कोड को पृष्ठ के साथ काफी शब्द मिल जाता है पृष्ठ प्रत्येक पृष्ठ ऑब्जेक्ट उदाहरण के सामने। –