/ / सेलेनियम और रूबी तत्व मानचित्रण - माणिक, सेलेनियम

सेलेनियम और रूबी तत्व मानचित्रण - माणिक, सेलेनियम

मैं पेजऑबजेक्ट मॉडल का उपयोग करके अपने तत्वों को मैप करना चाह रहा हूं, हालांकि मैं निम्नलिखित समस्या का सामना कर रहा हूं:

1: त्रुटि तब दी गई है जब मेरे पास कोई ड्राइवर नहीं है, यह ठीक है क्योंकि मैं केवल अपने ड्राइवर को मैप करता हूं जब मैं क्लास को तुरंत लिखता हूं

     element = @driver.find_element(:id => "username")

def initialize driver
@driver = driver
@driver.navigate.to "http://www.google.com"
end

def set_username input
element.send_keys input
end

2:नीचे दिए गए दृष्टिकोण में, यह "लापता चालक के बारे में शिकायत नहीं करता है क्योंकि मैं इसे पहले से शुरू कर रहा हूं और इसे वैश्विक चर के रूप में पारित कर रहा हूं। लेकिन अब यह पृष्ठ को खोलने से पहले ही तत्व को मैप करने की कोशिश करता है, जो" कैन "टी तत्व को खोजने में विफल रहता है। "

     element = $driver.find_element(:id => "username")

def initialize
$driver.navigate.to "http://www.google.com"
end

def set_username input
element.send_keys input
end

प्रश्न है:क्या कोई गंदे तरीके से मैं अपने तत्वों को मैप कर सकता हूं और उन्हें ऑब्जेक्ट्स को असाइन कर सकता हूं लेकिन केवल उन्हें संकलित / पढ़ सकता हूं जब मुझे वास्तव में उनका उपयोग करने की आवश्यकता होती है (मैं केवल इसके साथ कुछ कार्रवाई set_username में करता हूं, और मैं केवल ऑब्जेक्ट को ट्रिगर करना चाहता हूं मैपिंग जब उदाहरण के लिए इस विधि में इसका इस्तेमाल करते हैं) ... मैं एक मौजूदा पेज का उपयोग नहीं करना पसंद करता हूं।

उत्तर:

जवाब के लिए 0 № 1

उसके साथ पेज ऑब्जेक्ट मॉडल, आपके पास एक ऑब्जेक्ट है जो आपके द्वारा परीक्षण किए जा रहे पृष्ठ का प्रतिनिधित्व करता है, और ऑब्जेक्ट जो निचले स्तर के HTML ऑब्जेक्ट का प्रतिनिधित्व करते हैं। इस मामले में, आपके पास निम्न कक्षाएं हो सकती हैं:

# Represents a text input HTML element...
class TextInput
attr_reader :element

def initialize(driver, id)
element = driver.find_element(:id => id)
end

def type(text)
element.send_keys text
end
end

# Represents the page you are testing...
class SomePage
attr_reader :driver, :username

def initialize(driver)
@driver = driver
end

def username
@username ||= TextInput.new(@driver, "username")
end
end

एक बार जब आप अपने ड्राइवर को इनिशियलाइज़ कर लेते हैं, तो आप इसे पास कर देते हैं SomePage, और इसका उपयोग करें ड्राइव करने के लिए आप क्या कर रहे हैं।

some_page = SomePage.new(driver)
some_page.username.type("Timmy")

मैं "के लिए वाउचर कर सकता हूं पृष्ठ-वस्तु रत्न क्योंकि मैंने इसका उपयोग कभी नहीं किया है, लेकिन यह उन HTML-लेयर ऑब्जेक्ट्स को हैंडल करेगा, और आपको पेज ऑब्जेक्ट क्लास में निर्माण के लिए एक डोमेन-विशिष्ट भाषा देगा।