क्रोमेड्रिवर 78 के साथ संभव मुद्दा, सेलेनियम क्रोम में खोले गए पीडीएफ के वेब तत्व को नहीं ढूंढ सकता है


17

जब तक मेरे Google Chrome को संस्करण 78 में अपडेट नहीं किया गया था, तब तक मेरे कोड ने ठीक काम किया था। मैंने 78.0.3904.70 संस्करण के लिए क्रोमेड्रिवर को भी अद्यतन किया। इसलिए मैं अब सेलेनियम वेबड्राइवर और जावा का उपयोग करते हुए id = 'plugin' के साथ WebElement खोजने में सक्षम नहीं हूं:

<html>
<div id="content">
<embed id="plugin" type="application/x-google-chrome-pdf" src="http://??????????/offer_printed.php?printable=yes&amp;reanudar=&amp;>
</div>
</html>

उस भाग के अलावा मेरे परीक्षण ठीक काम कर रहे हैं। मैंने पहले कभी इस तरह का मुद्दा नहीं रखा था। मैंने WebElement आईडी = 'सामग्री' खोजने की भी कोशिश की, लेकिन मुझे वही त्रुटि मिल रही है।

WebDriverWait wait = new WebDriverWait (driver, 90);
WebElement scrollvalid = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("plugin")));

scrollvalid.sendKeys(Keys.PAGE_DOWN);                       scrollvalid.sendKeys(Keys.PAGE_DOWN);

मेरी स्वचालन स्क्रिप्ट को पीडीएफ तत्व ढूंढना चाहिए और पृष्ठ को नीचे स्क्रॉल करना चाहिए। इसके बजाय, मुझे यह त्रुटि प्राप्त हो रही है: org.openqa.selenium.TimeoutException: 90 सेकंड के बाद समय-समय पर बाय.आईडी द्वारा स्थित तत्व की दृश्यता की प्रतीक्षा कर रहा है: प्लगइन

क्या कोई इसी तरह के मुद्दे का सामना कर रहा है? अग्रिम में धन्यवाद।


आज मैंने Google Chrome संस्करण 78 हटा दिया और संस्करण 76 और मेरा स्वचालन परीक्षण फिर से काम करता है। सब कुछ पूरी तरह से काम करता है। मुझे उम्मीद है कि संस्करण 78 के साथ यह मुद्दा ठीक हो जाएगा। इसलिए मैं क्रोमेड्राइवर (संस्करण 78) और मेरी .pom फ़ाइल में मैं निम्नलिखित निर्भरता का उपयोग कर रहा था: <निर्भरता> <groupId> org.seleniumhq.selenium </ groupId> <विरूपण साक्ष्य> selenium-chrome- ड्राइवर </ विरूपण साक्ष्य> <संस्करण> 3.141.59 </ संस्करण> </ निर्भरता>
मिक्स

मुझे भी वही समस्या हो रही है। पहले जो कोड काम करता था, अब विफल हो जाता है क्योंकि वेब ड्राइवर जो भी वेब तत्व मैं खोजने की कोशिश कर रहा हूं उसे खोजने में विफल रहता है। अस्पष्ट और स्पष्ट प्रतीक्षा समान है। जो मैं इंगित नहीं कर पाया, वह उन तत्वों का प्रकार है जिनके साथ समस्या है या यदि यह सिर्फ एक iframe के अंदर स्थित घटक हैं। वर्कअराउंड के रूप में, मैं उन Thread.sleepजगहों पर जोड़ रहा हूं जहां मुझे इस अपडेट से पहले निहित या स्पष्ट इंतजार था।
hfontanez

क्रोमड्रीवर 77 के साथ क्रोम 78 मेरे लिए काम करता है।
यूं

जवाबों:


5

मैं एक ही मुद्दे में चला गया हूँ।

जाहिरा तौर पर क्रोम स्वचालित रूप से खुद को अपडेट करता है। कल (अक्टूबर 29 '19) मेरे क्रोमड्राइवर ने शिकायत करना शुरू कर दिया कि यह क्रोम 78 के साथ संगत नहीं था। मैंने ड्राइवर को 78 संस्करण में अद्यतन किया। मैं यादृच्छिक org.openqa.selenium.NoSuchElementException अपवादों को प्राप्त करना शुरू कर दिया जब मैंने उन तत्वों को खोजने की कोशिश की, जिनकी मैंने पुष्टि की थी। जब मैं ब्रेकपॉइंट्स का उपयोग करता हूं, तो FindElement [s] भी काम करता है। मैंने केवल सीमित सफलता के साथ निहित प्रतीक्षा की कोशिश की।

मैंने zsbappa के ChromeOption समाधान की कोशिश की, लेकिन कोई खुशी नहीं हुई।

Google ने Chrome के पुराने संस्करणों को प्राप्त करना कठिन बना दिया है, लेकिन मुझे https://www.neowin.net/news/google-chrome-76-offline-installer/ पर 76 संस्करण मिले । खबरदार, ऑनलाइन इंस्टॉलर नवीनतम संस्करण को स्थापित करता है। मैं चालक के लिए 76 में वापस आया और सब अच्छा है। मेरे सभी सेलेनियम परीक्षण फिर से काम कर रहे हैं।

मेरा निष्कर्ष यह है कि क्रोम 78 और यह संबद्ध ड्राइवर की दौड़ की स्थिति है जहां सेलेनियम वेब पेज को पूरा करने से पहले पूछताछ करने का प्रयास करता है।


मैंने ChromeDriver डेवलपर्स के साथ अंक 3198 खोला है।
wdtj

1
मुझे मेरे मुद्दे पर निम्नलिखित प्रतिक्रिया मिली: इस मुद्दे की रिपोर्टिंग के लिए धन्यवाद। 77 संस्करण के रूप में, Chromedriver फ्रेम या iframes को लोड करने के लिए इंतजार नहीं करता है जब एक नए पृष्ठ पर नेविगेट करना, या विंडोज़ स्विच करना। यह उपलब्ध संसाधनों के लिए कोड प्रतीक्षा की आवश्यकता का परिचय देता है। अधिकांश बाइंडिंग में एक स्पष्ट प्रतीक्षा के साथ-साथ अंतर्निहित प्रतीक्षा सेटिंग्स भी होती हैं। अधिक जानकारी के लिए सेलेनियम प्रलेखन में WebDriverWait की खोज करें।
wdtj

लेकिन हम स्पष्ट प्रतीक्षा का उपयोग कर रहे हैं और यह मदद नहीं करता है। यह iframes बदलने के लिए मदद करता है, लेकिन HTML टैग्स एम्बेडेड pdf के लिए अब दिखाई नहीं देते हैं।
मिक्स

मैंने क्रोमेड्राइवर समूह पर एक नया अंक खोला: Bugs.chromium.org/p/chromedriver/issues/detail?id=3211
मिक्स '

आप परीक्षण के लिए क्रोमियम का उपयोग कर सकते हैं, यह गूगल सेवाओं के बिना क्रोम के मूल संस्करण है, यह अपने आप में अपडेट नहीं होगा और यह Chromedriver साथ ठीक काम करता है: chromium.org/getting-involved/download-chromium
ब्लेज

3

हमने Chrome 78.0.3904.7, Chromedriver 77/78, Python Selenium 3.011.0 के साथ एक समान समस्या का सामना किया है।

हमारे स्वचालित पायथन सेलेनियम परीक्षणों में, हमने कई विफलताएं देखी हैं जहां यह प्रतीत होता है कि तत्वों पर क्लिक नहीं हुए हैं। यहां तक ​​कि अजनबी भी, यह प्रतीत होता है कि तत्व सक्रिय हो गया है (जैसे कि यह क्लिक किया जाने वाला था) लेकिन वास्तविक क्लिक घटना कभी नहीं हुई। परिणामस्वरूप, पृष्ठ स्विचेस आदि विभिन्न डाउनस्ट्रीम विफलताओं के परिणामस्वरूप उत्पन्न नहीं होते हैं।

निशान और त्रुटि की एक प्रक्रिया से, हमने पाया कि मानक (.click) फ़ंक्शन का उपयोग करना अब विश्वसनीय नहीं है:

webdriver_element.click()

लेकिन एक्शन चेन्स का उपयोग करना विश्वसनीय प्रतीत होता है:

ActionChains(context.browser).click(webdriver_element).perform()

यह स्पष्ट नहीं है कि यह मामला क्यों है। जैसे ही हम Chrome 78.0.3904.7 में अपग्रेड हुए, विफलताएं शुरू हो गईं। हम Chromedriver 77.0.3865.90 का उपयोग कर रहे हैं, लेकिन वही परीक्षण Chrome 77.x संस्करणों पर मज़बूती से पास होते हैं इसलिए ऐसा प्रतीत होता है कि यह कुछ गलत है या Chrome 78 में बदल गया है।


इससे मुझे काफी मदद मिली, धन्यवाद।
पिडोन

1

निम्नलिखित तर्क जोड़कर मैंने अपनी समस्या हल कर ली है।

   ChromeOptions options = new ChromeOptions();
    options.addArguments("--disable-gpu");
    options.addArguments("--disable-extensions");
    options.setExperimentalOption("useAutomationExtension", false);
    options.addArguments("--window-size=1920,1080");
    options.merge(seleniumCapabilities);
    driver = new ChromeDriver(options);

हाय @zsbappa! आपके जवाब के लिए धन्यवाद। हालाँकि, यह मेरी समस्या का समाधान नहीं करता है। समस्या यह है कि क्रोमेड्रिवर (संस्करण 78) एम्बेडेड पीडीएफ में कोई वेब तत्व नहीं खोज सकता है। यह कार्यकुशलता तब तक ठीक रही जब तक कि Google क्रोम को संस्करण 78 में अपडेट नहीं किया गया। PS मैं बिना सिर मोड में अपने परीक्षण नहीं चला रहा हूँ
मिक्स

यह स्पष्ट नहीं है कि ये विकल्प ओप्स मुद्दे को कैसे हल करते हैं।
कैल कॉर्बिन

यह समस्या को हल नहीं करता है। सबसे अधिक संभावना है, आप उन परिदृश्यों को चला रहे हैं जहां वेब तत्व आइफ्रेम के अंदर स्थित नहीं है।
hfontanez

1

मैंने एक ही मुद्दे का सामना किया है जब एक आइफ्रेम के अंदर एक टैब का उपयोग करने की कोशिश कर रहा है, यह 76 संस्करण पर ठीक काम करता था। अब जिसने खुद को 78 तक अपडेट किया है, वह विफल हो रहा है। प्रतीक्षा करने की कोशिश की है, निहित प्रतीक्षा, नींद, बिना किसी भाग्य के xpath, CSS, id, स्विच संदर्भ, स्क्रॉल तक दृश्य, आदि का उपयोग करके तत्वों का पता लगाएं। मैं विंडोज़ 10, 1809 का उपयोग कर रहा हूं। मुझे नहीं पता कि यह अन्य ओएस में हो रहा है या नहीं।

यहाँ मैंने जो सवाल उठाया है:

क्रोमेड्राइवर 78.0.3904.70 लोकेटर का उपयोग करने में समस्या


1

मैंने कल पुष्टि की कि यह समस्या केवल तब प्रकट होती है जब कोई तत्व आईफ्रेम में निहित होता है। उन मामलों में, iframe ठीक स्थित है। हालाँकि, ड्राइवर या वेब ड्राइवर प्रतीक्षा ऑब्जेक्ट का उपयोग करके वेब तत्व का पता लगाने का प्रयास करने के परिणामस्वरूप NoSuchElementया TimeoutExceptionक्रमशः होगा।

मैंने क्रोमेड्रिवर टीम को वर्बोज़ क्रोम ड्राइवर लॉग प्रदान किया और वे इस पर काम कर रहे हैं।

अद्यतन : क्रोमेड्राइवर मुद्दे से 3223

लॉग दिखाते हैं कि फ़ाइंड के लिए अंतिम निष्‍पादनकॉन्‍टेक्‍ट क्रिएट किया गया है, जब तक कि FindElement रिटर्न ना हो जाए। संस्करण 77 में शुरू होकर, क्रोमड्राइवर ने निरंतर नेविगेशन से पहले सभी फ़्रेमों के लोड होने की प्रतीक्षा करना बंद कर दिया। दुर्भाग्य से, उस परिवर्तन ने वर्तमान फ्रेम को लोड करने के लिए एक प्रतीक्षा को रोका। 3164 सभी वर्तमान फ्रेम के लोड होने की प्रतीक्षा करेंगे; यह फ़्रेमऑउट लोड होने के बाद तक FindElement को खोजने से रोकना चाहिए और निष्पादन बनाया जाता है।

मूल रूप से, इस बग को v.77 में पेश किया गया था। हममें से कई लोगों ने इस समस्या पर ध्यान दिया क्योंकि हम v.76 से .v78 में अपग्रेड हुए। वर्ड यह है कि वे .v80 के लिए एक फिक्स को लक्षित कर रहे हैं (v। 79 नहीं)। वर्कअराउंड के रूप में, मैं Thread.sleepउस समय का उपयोग कर रहा हूं जब मैं आईफ्रेम पर स्विच करता हूं और जब मैं घटक का पता लगाने का प्रयास करता हूं। यह समाधान ठीक काम करता है। वास्तव में, आप अपने आवेदन को केवल DEBUG मोड में चलाकर स्वयं सत्यापित कर सकते हैं। जब आप निष्पादन (ब्रेकपॉइंट का उपयोग करके) रोकते हैं, तो आप देखेंगे कि आपका मूल कोड (नींद के बिना) ठीक काम करता है।


0

उदाहरण के लिए: आप इस कीवर्ड का उपयोग करके देख सकते हैं!

1. implicit_wait=10
2. Sleep  10

हाय @ नरसिम्हामूर्ति जीएन, आपके उत्तर के लिए धन्यवाद। स्पष्ट प्रतीक्षा कोई समस्या नहीं है, मैं अपने सभी परीक्षणों में स्पष्ट प्रतीक्षा का उपयोग कर रहा हूं और मैं एक समान समस्या का सामना नहीं कर रहा हूं। समस्या यह है कि क्रोमेड्रिवर (संस्करण 78) एम्बेडेड पीडीएफ में कोई वेब तत्व नहीं खोज सकता है।
मिक्स

मेरे लिए कुछ परीक्षण मामलों में मुझे भी उसी मुद्दे का सामना करना पड़ा है जिसके लिए मैंने "जियोकोड्राइवर" (फ़ायरफ़ॉक्स) का उपयोग किया है।
जीएन

अन्यथा WebElement खोजने के लिए विभिन्न सेलेनियम लाइब्रेरी लोकेटर कीवर्ड का उपयोग करें।
नरसिंहमूर्ति जीएन

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


0

मेरी भी यही समस्या थी।

संस्करण 78.0 के साथ क्रोम को ऑटो-अपडेट करने के बाद, मेरी स्वचालित परीक्षण स्क्रिप्ट विफल हो रही थी। इसलिए मैंने 78 संस्करण में क्रोमेड्रिवर को अपडेट किया, लेकिन ड्राइवर अभी भी कोई वेब तत्व नहीं खोज पा रहा था। उसके बाद मैंने क्रोमेड्रिवर के कई संस्करणों के साथ प्रयास किया और अंत में मेरा मुद्दा क्रोमेड्रिवर संस्करण 2.44 के साथ हल हो गया

यह संस्करण https://chromedriver.storage.googleapis.com/index.html?path=.b/ पर पाया जा सकता है।


-1

आप पैकेज मैनेजर को Nuget कर सकते हैं , Chrome ड्राइव को हटा सकते हैं और क्रोम को खोज सकते हैं, jsaKamoto के लिए नया संस्करण selenium.web.driver.ChromeDriver >> डाउनलोड कर सकते हैं

वहाँ आप क्रोम संस्करण 78 पाते हैं।


प्रतिक्रिया के लिए धन्यवाद, लेकिन यह वास्तव में क्रोम संस्करण 78 में NoSuchElement अपवादों की समस्या का जवाब नहीं देता है।
wdtj
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.