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

जिस तरह से मैं करता हूं:

$private_key_path = '/Users/user1/Desktop/my_file.zip'

upload_generated_zip_btn = browser.all(:element, 'material-button', text: 'Upload generated ZIP')

browser.attach_file($private_key_path) do
  upload_generated_zip_btn[0].click
end

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

ArgumentError: Capybara was unable to determine the file input you're attaching to

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

बटन कोड का स्क्रीनशॉट:

enter image description here

सोर्स कोड:

enter image description here

2
Nikita Basharkin 18 अगस्त 2021, 23:44

2 जवाब

सबसे बढ़िया उत्तर

अटैच_फाइल के ब्लॉक संस्करण का उपयोग करते समय Capybara <input type="file"> तत्वों पर क्लिक के लिए श्रोता को जोड़ता है और इसका उपयोग यह निर्धारित करने के लिए करता है कि आप किस इनपुट से फाइल संलग्न करना चाहते हैं। चूंकि यह इसे नहीं ढूंढ रहा है या तो यह क्लिक को ट्रिगर नहीं कर रहा है, या जिस तरह से आपका कोड संरचित है वह Capybara से क्लिक छुपा रहा है। पहले मैं पूछूंगा कि आप बटन खोजने के लिए all और element चयनकर्ता प्रकार का उपयोग क्यों कर रहे हैं और इसके बजाय सुझाव दें (मान लें कि ब्राउज़र Capybara सत्र है ??)

browser.attach_file($private_key_path) do
  browser.find('material-button', text: 'Upload generated ZIP').click
end

यह कहना मुश्किल है कि क्या यह सही है क्योंकि आप वास्तव में अपने प्रश्न में उस टेक्स्ट वाले बटन के लिए HTML नहीं दिखाते हैं। यदि वह अभी भी काम नहीं करता है, तो आपको वास्तव में फ़ाइल इनपुट तत्व का पता लगाने और अटैच_फाइल के गैर-ब्लॉक संस्करण का उपयोग करने की आवश्यकता होगी। कुछ इस तरह

attach_file($private_key_path, make_visible: true)

या पहले फ़ाइल इनपुट स्वयं ढूंढकर

browser.find('input[type="file"]', visible: false).attach_file($private_key_path, make_visible: true)

फिर से निश्चित रूप से कहना मुश्किल है क्योंकि आपका HTML वास्तव में वह बटन नहीं दिखाता है जिसे आप क्लिक करने का प्रयास कर रहे हैं।

1
Thomas Walpole 18 अगस्त 2021, 23:56

Capybara अदृश्य तत्वों के साथ बातचीत नहीं करता है। तो, छिपी हुई विशेषता को हटाने और फ़ाइल चयन के लिए दृश्यमान बनाने का प्रयास करें इसे आजमाएं:

selector = {Selector} # selector for material button
Capybara.current_session.execute_script("document.querySelector('#{selector}').removeAttribute('hidden')")
expect(page).to have_content(file_upload", visible: true)
page.attach_file(
            find('material-button', text: 'Upload generated ZIP'),
            Rails.root.join($private_key_path)
0
Kiran Reddy 27 अगस्त 2021, 11:00