के साथ ड्रॉपडाउन तत्व मेनू पर क्लिक करें, मैं एक प्रशासनिक कार्य स्वचालित करने की कोशिश कर रहा हूं, अब तक मैंने ड्रॉप डाउन मेनू दिखाने के लिए तत्व पर क्लिक करने के लिए सेलेनियम बनाया है।सेलेनियम वेबड्राइवर
यह समय उन मेनू तत्वों मैं कह रही है कि तत्व प्रदर्शित किया जाना चाहिए एक त्रुटि मिल गया है में से एक पर क्लिक करने के लिए आता है।
कोड:
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get(url)
doc = driver.find_element_by_css_selector('td.ms-vb-title > table')
try:
doc.click()
time.sleep(4)
menu = driver.find_element_by_xpath('//menu/span[5]')
time.sleep(4)
print dir(menu)
menu.click()
except:
traceback.print_exc()
driver.quit()
त्रुटि:
Traceback (most recent call last):
File "aprobar_docs.py", line 22, in main
menu.click()
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webelement.py",
line 52, in click
self._execute(Command.CLICK_ELEMENT)
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webelement.py",
line 205, in _execute
return self._parent.execute(command, params)
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", l
ine 156, in execute
self.error_handler.check_response(response)
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py"
, line 147, in check_response
raise exception_class(message, screen, stacktrace)
ElementNotVisibleException: Message: u'Element must be displayed to click'
कोड एक बहुत इंतजार कर रहा है के रूप में आप देख सकते हैं तत्व लोड करने के लिए। मैंने तत्व की is_displayed
संपत्ति True
पर सेट करने का भी प्रयास किया है लेकिन न तो काम नहीं किया है।
नोट:
menu
चर नहीं है: तत्व यह है कि दिखाई नहीं देता है xpath खोज पर एक है, यह मौजूद है, क्योंकि मैं dir (मेनू) के साथ यह प्रवेश करने के बाद
संपादित है मेनू स्वयं ही स्पैन में से एक है जो मेनू के तत्व हैं, doc
Perfil
एचटीएमएल तत्व ड्रॉपडाउन दिखाने के लिए क्लिक किया जा रहा है।
संपादित करें 2:
, क्रोम उपकरण पर डोम निरीक्षण जब आप एक doc
एक नया मेनू पेड़ पर बनाया जाता है, मैं अगर यह एक ajax कॉल या वेनिला js की वजह से नहीं जानता क्लिक करें, मुझे नहीं लगता कि यह वास्तव में महत्वपूर्ण है कि यह कैसे बनाया गया है। मैं इसे पृष्ठ से पुनर्प्राप्त नहीं कर सकता और इससे एक अजगर वस्तु बना सकता हूं, यह कम से कम कोड पर प्रदर्शित नहीं किया जा रहा है।
अंतिम संपादित करें:
मैं इसे काम करने के लिए कुछ जावास्क्रिप्ट को क्रियान्वित करने समाप्त हो गया। जाहिर है जब सेलेनियम मेनू आइटम को मेनू तत्व को ट्रिगर करने वाला पहला तत्व फोकस खो देता है और यह मेनू को अदृश्य बनाता है, यदि आप मेनू आइटम का चयन नहीं करते हैं और कुछ समय के लिए प्रतीक्षा करते हैं तो मेनू ड्रॉपडाउन अभी भी दिखाया गया है, यदि आप मेनू गायब होने वाले मेनू से एक तत्व का चयन करने का प्रयास करें।
आप 'menu' तत्व देखने के दोनों किनारों पर क्यों सो रहे हैं?यदि पृष्ठ तत्व पुनर्प्राप्त करते समय तत्व दिखाई नहीं देता है, तो वेबड्राइवर इसे क्लिक करने में सक्षम नहीं होगा, चाहे आप कितनी देर प्रतीक्षा करें। –
@ sr2222 जब आप driver.get() को कॉल करते हैं तो पृष्ठ पुनर्प्राप्त किया जाता है, स्क्रीन पर ड्रॉपडाउन प्रदर्शित होता है और जब आप doc.click() करते हैं तो डोम पेड़ पर मौजूद होते हैं, मैंने ड्रॉपडाउन मेनू को लोड नहीं होने की संभावना को समाप्त कर दिया जैसे ही कोड निष्पादित किया जाता है। मेनू तत्व कम से कम मनुष्यों के लिए मौजूद और दृश्यमान है, मैं इसकी गारंटी दे सकता हूं। – loki
मेनू को प्रदर्शित करने के लिए क्लिक करने और प्रतीक्षा करने के बाद फिर से 'डॉक्टर' निकालने का प्रयास करें, और वस्तुओं के 'id' विशेषता को पहले और बाद में तुलना करें। मुझे एक छेड़छाड़ संदेह है कि सेलेनियम सर्वर वास्तव में आपके दूसरे तत्व निष्कर्षण पर एक कैश किए गए कमजोर वस्तु का संदर्भ दे रहा है (चूंकि आपकी क्लिक कार्रवाई पृष्ठ लोड ईवेंट को ट्रिगर नहीं करती है, पेज ऑब्जेक्ट बासी नहीं जाती है)। –