2013-04-05 6 views
5

क्रोम में, वॉटर-वेबड्राइवर का उपयोग करके, मैं एक बटन क्लिक करता हूं जो एक बाल ब्राउज़र विंडो खोलता है।खुद को बंद करने वाली एक बाल ब्राउज़र विंडो स्पष्ट रूप से वॉटर-वेबड्राइवर के लिंक को मूल विंडो में तोड़ देती है?

मुझे क्या करना:

@browser.window(title: 'Child').use 

मैं सफलतापूर्वक कि चाइल्ड विंडो में विभिन्न मदों के साथ बातचीत।

बहुत जल्द, इस विंडो में एक कार्रवाई की गई है जिसे साइट पहली बार विंडो खोलने का "बिंदु" था। उदाहरण के लिए,

@browser.button(title: 'Button').click 

जब यह क्रिया की जाती है, तो बच्चे की खिड़की स्वयं बंद हो जाती है।

@browser.window(title: 'Parent').use # => results in 
# Selenium::WebDriver::Error::NoSuchWindowError: emptyScript execution failed; 
# The window could not be found 

कारण मेरा मानना ​​है कि यह एक सेलेनियम/Watir-webdriver बग है है क्योंकि निम्नलिखित:

जब मैं watir-webdriver बता माता पिता विंडो का उपयोग करने के लिए वापस जाने के लिए, तथापि, मैं कोई त्रुटि मिलती है कोड काम करता है:

@browser.window(title: 'Child').use 
# ... Now I do various things in the child window that do NOT 
# ... cause it to close itself. They all work as expected. 
# ... 
puts @browser.window(title: 'Parent').present? #=>true 
@browser.window(title: 'Child').close 
puts @browser.window(title: 'Parent').present? #=>true 
@browser.window(title: 'Parent').use # => No error thrown 

एकमात्र अंतर वह क्रिया है जो बच्चे की खिड़की को बंद करने का कारण बनती है।

मुझे पता है कि वॉटरस्पेक कोड में स्वयं बंद खिड़की के लिए टेस्ट केस नहीं है, इसलिए शायद यह वॉटर-वेबड्राइवर में विंडोज कोड का अनदेखा पहलू है।

ठीक है, तो यहाँ कोड है कि आप चला सकते हैं, इस समस्या को अपने आप को देखने के लिए है:

require 'watir-webdriver' 
@b = Watir::Browser.new :chrome 
@b.goto 'ckeditor.com/demo#full' 
@b.div(id: 'cke_editor1').link(title: 'Link').click 
@b.link(title: 'Browse Server').wait_until_present 
@b.link(title: 'Browse Server').click 
@b.window(title: 'CKFinder').use { 
    @b.frame(title: 'CKFinder').link(id: 'r0').right_click 
    @b.frame(title: 'CKFinder').frame(id: 'cke_22_frame').wait_until_present 
    @b.frame(title: 'CKFinder').frame(id: 'cke_22_frame').link(id: 'cke_200').click 
} 

कि इस त्रुटि का परिणाम देगा:

Selenium::WebDriver::Error::NoSuchWindowError: emptyScript execution failed; 
The window could not be found 

मैं मत कहो कभी नहीं किया 'के लिए nuthin'! :-)

अब, आप पूछने से पहले "आप एक तृतीय पक्ष संपादन उपकरण का परीक्षण क्यों कर रहे हैं, आप पागल आदमी?" मैं आपके लिए जवाब दूंगा: मैं नहीं हूं।

मैं जो परीक्षण कर रहा हूं वह यह है कि सीकेईडिटर उपकरण द्वारा उत्पन्न स्रोत कोड को किसी विशेष स्थिति में ठीक से अपडेट किया जाता है (जो यहां इस प्रश्न के दायरे से काफी दूर है)। इसे स्थापित करने के लिए आवश्यक है कि मुझे पहले पता चले कि वह स्रोत कोड है ताकि बाद में, मैं सत्यापित कर सकूं कि यह एक अलग प्रक्रिया द्वारा ठीक से अपडेट हो जाता है। और ऐसा करने के लिए, मुझे पहले CKEditor के लिंक टूल का उपयोग करके इसे ठीक से सेट अप करना होगा। Capiche?

+0

आप सेलेनियम का उपयोग कर रहे 'हो सकता है 'या 'वॉटर' वेबड्राइवर? –

+0

वॉटर-वेबड्राइवर - जैसा कि यह मेरी पहली वाक्य में कहता है। :-) –

+0

मैंने वॉटरस्पेक को देखा और अब इस संबंध में सही है। हमारे पास यह देखने के लिए एक परीक्षण है कि हम बच्चे की खिड़की देख सकते हैं, लेकिन यही वह है। उदाहरण के लिए हम उपयोग के लिए rdoc में उदाहरण कोड शो के लिए एक परीक्षण नहीं है .. –

उत्तर

1

आप खुले आप

@browser.windows[0] 

उपयोग कर सकते हैं वापस पहले खिड़की को पाने के लिए की जरूरत है तुम भी कुछ इस तरह (परीक्षण नहीं) ऐसा करने में सक्षम

@browser.windows.each do |window| 
    if window.title.include?(target_string) 
    window.use 
    end 
end 
+0

यह बहुत अच्छा होगा अगर कोड की इस पंक्ति से पहले त्रुटि नहीं हुई (दुर्भाग्य से, क्या होगा)। –

संबंधित मुद्दे