2012-05-25 9 views
8

तो जब मैं व्यक्तिगत रूप से अपने परीक्षण चलाता हूं, तो वे बहुत अच्छा काम करते हैं। हालांकि, जब मैं अपनी सुविधा (एकाधिक परीक्षण) चलाता हूं तो मेरा कोड विफल हो रहा है।
ऐसा इसलिए है क्योंकि जब कैपिबरा मौजूद है, मेरी सभी खिड़कियां बंद नहीं हो रही हैं और इसलिए मेरे सेलेनियम ड्राइवरों को पता नहीं है कि कौन सी खिड़की का उपयोग करना है।क्या आप कैपिबरा में सभी खुली खिड़कियां बंद कर सकते हैं?

असल में, क्या हो रहा है कि मेरा परीक्षण कई खिड़कियां खोल रहा है। ऐसा इसलिए हो रहा है क्योंकि मेरे परीक्षण लिंक पर क्लिक कर रहे हैं जो नई विंडो खोलते हैं और नई विंडो में सामग्री की जांच करते हैं। भले ही मैं प्रत्येक परीक्षण के अंत में page.quit कह रहा हूं, यह फ़ंक्शन सभी खुली विंडो बंद नहीं कर रहा है (सक्रिय विंडो बंद करता है लेकिन मूल विंडो नहीं)। जब दूसरा परीक्षण चलता है, तो यह मूल रूप से विंडो बनाता है, लेकिन जब यह नया पॉप अप खोलने के लिए जाता है, तो यह गलत विंडो का उपयोग करता है।

मैं कैसे सुनिश्चित कर सकता हूं कि प्रत्येक परीक्षण के दौरान एक नया ब्राउज़र उपयोग किया जा रहा है और पिछले परीक्षण की सभी विंडो बंद हैं।
मैं वर्तमान में page.reset! और page.quit का उपयोग कर रहा हूं।
सुनिश्चित नहीं है, लेकिन क्या मैं सभी खुली ब्राउज़र विंडो बंद करने के लिए session.quit कह सकता हूं?

उत्तर

1

निम्नलिखित का प्रयास करें:

page.driver.browser.window_handles.each do |handle| 
    page.driver.browser.switch_to.window(handle) 
    page.quit 
end 

(मुझे लगता है कि यह काम करेगा, लेकिन मैं इसे परीक्षण करने का मौका नहीं मिला है।)

+1

यह काम नहीं करेगा, 'छोड़ें' फ़ंक्शन मौजूद नहीं है। बंद के साथ ही। – Jason

+1

यह – Jason

+0

काम नहीं करता है हालांकि यह यादृच्छिक रूप से काम करता है।इस बार उसने मुझे 'विफलता/त्रुटि दी: बैकट्रैस सेलेनियम :: वेबड्राइवर :: त्रुटि :: NoSuchWindow त्रुटि: getUrl निष्पादन विफल रहा; विंडो नहीं मिली ' – Ava

3

मैं पॉपअप पहुँचने के लिए इस कोड टुकड़ा का उपयोग करें और के बाद उन्हें बंद । यह बहुत अंतर नहीं होना चाहिए

within_window(page.driver.browser.window_handles.last) do 
    click buttons and stuff... 
    ... 
    page.driver.browser.close #closes popup 
end 

आशा है कि यह

+0

यह काम नहीं करता है क्योंकि सभी संसाधन खो गए हैं और दूसरा परीक्षण "ब्राउज़र नहीं मिला" या उन पंक्तियों के साथ कुछ कहने में विफल रहता है। – Jason

8

इस कोड काम करता है में मदद करता है:

page.execute_script "window.close();" 

मैं सिर्फ खिड़की मैं बंद करना चाहते हैं में इस पर अमल करते हुए।

+0

यह कोड काम नहीं करता है यदि आप गंदे रूपों जैसे प्लगइन का उपयोग कर रहे हैं, और स्क्रीन पर गंदे रूप हैं, तो उस स्थिति में जावास्क्रिप्ट एक "आप निश्चित हैं" अलर्ट पॉप अप करता है और पृष्ठ बंद नहीं होता है। "पेज.सेटेट" करने के लिए बहुत बेहतर है! परीक्षण चलाने से पहले। – Rob

+0

'page.execute_script" window.close(); "मेरे लिए काम नहीं करता है। ';' के बिना होना चाहिए, यानी 'page.execute_script "window.close()" ' –

3
page.driver.browser.window_handles.each do |handle| 
    page.driver.browser.switch_to.window(handle) 
    page.execute_script "window.close()" 

end 

मेरे लिए आकर्षण था। @ जेसन और @ जस्टिन के उत्तरों का संयोजन।

धन्यवाद!

1

इस प्रयास करें:

tab_id = page.driver.find_window("http://google.com.au") 
page.driver.browser.switch_to.window(tab_id) 
page.driver.quit 

यह मेरे लिए काम किया।

0

अपनी सुविधा परीक्षण करने के लिए इस जोड़ें, यह सत्र कुकीज़ रीसेट कर देंगे और एक रिक्त पृष्ठ पर परीक्षण शुरू:

# Window washing - use a clean window before every example 
before(:example) do 
    page.reset! 
end 
1

आदेश कल्पना फ़ाइल में सभी दावे करने के लिए, मैं पारित कर दिया नियंत्रण को नया पृष्ठ (विंडो) दावे को क्रियान्वित करने के बाद मैं बंद कर दिया नया पृष्ठ और bellow के रूप में पारित कर दिया नियंत्रण मूल पृष्ठ पर:

after(:each) do 
    expect(@static_page.has_logo?).to eq(true) # assertion in new page 
    page.execute_script('window.close()') # close new page 
    switch_to_window(windows.first) # return control to first page 
end