"दूसरा" लिंक के बारे में सबसे बुरी बात यह है कि यह तीसरा या पहला या यहां तक कि बीस पांचवां दिन बन सकता है। तो, within
ब्लॉक के साथ स्कॉइंग सबसे अच्छा तरीका है। उदाहरण:
within(".comment") do
click_on("View")
end
लेकिन अगर यह एक within
गुंजाइश के साथ लिंक (जो कभी कभी यह वास्तव में है) निर्दिष्ट करने के लिए मुश्किल है, मैं जिस तरह से एक निश्चित पाठ के साथ क्लिक करने के लिए दूसरी कड़ी लगता है:
find(:xpath, "(//a[text()='View'])[2]").click
capybara के बाद के संस्करणों (2.0.2
, उदाहरण के लिए) में दोनों click_on 'दृश्य' और click_link 'दृश्य' एक अस्पष्ट मैच त्रुटि बढ़ा देंगे:
Failure/Error: click_on 'View'
Capybara::Ambiguous:
Ambiguous match, found 2 elements matching link or button "View"
तो यह तब भी नहीं होगा जब आप पहले लिंक पर क्लिक करना चाहते हैं (या यदि कोई लिंक ठीक होगा, जो मेरा मामला है)।
जहां तक मैं समझता हूं कि लोगों को अधिक विशिष्ट परीक्षण लिखने के लिए मजबूर किया जाता है जहां विशेष लिंक क्लिक किए जाते हैं।
यदि आप गलती से समान पाठ के साथ दो या दो से अधिक लिंक डालते हैं और क्या हो रहा है यह देखने का प्रयास करते हैं तो कोड को डीबग करना मुश्किल हो सकता है। within
ब्लॉक के साथ एक लिंक को बदलने और निर्दिष्ट करने की संभावना नहीं है, इस पर भरोसा करना अच्छा होता है।
दुर्भाग्यवश, मेरे पास कोई सीएसएस-श्रेणी "टिप्पणी" नहीं है। दो लिंक समान हैं। उनके बीच एकमात्र अंतर उनकी स्थिति है। एक दूसरे के बाद चला जाता है। मैं दूसरे लिंक पर क्लिक करना चाहता हूं। –
मैं प्रस्तुत करता हूं कि आपको तब उस लिंक पर एक कक्षा शुरू करनी चाहिए जिसे आप चुनना चाहते हैं या परीक्षण के लिए एक हुक के रूप में एक रैपर तत्व। आप एनएच-चाइल्ड स्यूडोसेलेक्टर (http://www.w3.org/TR/css3-selectors/#nth-child-pseudo) का उपयोग करने में सक्षम हो सकते हैं, लेकिन मैं इसके खिलाफ अनुशंसा करता हूं क्योंकि यह एक भंगुर और ऑर्डर-निर्भर लिंकेज पेश करता है अपने परीक्षण में – karmajunkie
धन्यवाद! मुझे यही चाहिए! मेरे मामले में 'एनएच-चाइल्ड' बहुत अच्छा है! –