2012-01-12 6 views
14

मैं एक इनपुट सबमिट करने की कोशिश कर रहा हूं (प्रकार = बटन) लेकिन मैं मूल्य को अपडेट करने में असमर्थ हूं। किसी भी मदद की सराहना की है। मैंने आपके संदर्भ के लिए नीचे टेस्टकेस संलग्न किया है। क्लिक के लिएपायथन बाइंडिंग का उपयोग करके, सेलेनियम वेबड्राइवर क्लिक() कभी-कभी काम नहीं कर रहा है।

खोज यहाँ

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import Select 
from selenium.common.exceptions import NoSuchElementException 
import unittest, time, re,datetime,os,sys 

from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.common.action_chains import ActionChains 


def is_element_present(inst,selector,value): 
    try: 
     inst.find_element(by=selector, value=value) 
     return True 
    except: 
     return False 



class Testing(unittest.TestCase): 
    def setUp(self): 
     self.driver = webdriver.Chrome() 
     self.driver.implicitly_wait(5) 
     self.base_url = "http://new.ossmoketest.appspot.com/" 
     self.verificationErrors = [] 

    def test_ing(self): 
     try: 

      driver = self.driver 
      driver.get(self.base_url + "/Apab4b39d4_09d7_11e1_8df9_139372201eeb/1/signin?forward=/%3F") 
      now = datetime.datetime.now() 
      start = time.clock() 

      for i in range(5000000): 
       try: 
        if is_element_present(driver,By.ID,"userid"): break 
       except: pass 
      else: self.fail("time out") 
      end = time.clock() 
      diff = end - start 
      print diff 
      driver.find_element_by_id("userid").clear() 
      driver.find_element_by_id("userid").send_keys("[email protected]") 
      driver.find_element_by_xpath("//input[@src='/static/images/signup.png']").click() 
      print 'finished' 
      start = time.clock() 

      for i in range(5000000): 
       try: 
        if is_element_present(driver,By.LINK_TEXT,"Logout"): break 
       except: pass 
      else: self.fail("time out") 
      end = time.clock() 
      diff = end - start 
      print diff 
      time.sleep(5) 

      start = time.clock() 
      name = "smoketest"+ str(now.minute) +str(now.second) 
      for i in range(5000000): 
       try: 
        if is_element_present(driver,By.LINK_TEXT,"PurchaseOrder"): break 
       except: pass 
      else: self.fail("time out") 
      end = time.clock() 
      diff = end - start 
      driver.find_element_by_link_text('PurchaseOrder').click() 
      name = "smoketest"+ str(now.minute) +str(now.second) 
      start = time.clock() 
      for i in range(5000000): 
       try: 
        if is_element_present(driver,By.ID,"Customer_Name"): break 
       except: pass 
      else: self.fail("time out") 
      end = time.clock() 
      diff = end - start 

      newproduct = "rexona"+ str(now.minute) +str(now.second) 
      newprice = str(now.minute) +str(now.second) 
      newprice = float(newprice) 
      print newprice 
      driver.find_element_by_xpath("//input[starts-with(@id,'New_Product')]").send_keys(newproduct) 
      driver.find_element_by_xpath("//input[starts-with(@id,'Price')]").clear() 
      time.sleep(3) 

      driver.find_element_by_xpath("//input[starts-with(@id,'Price')]").send_keys(Keys.CONTROL+'a'+Keys.NULL, str(newprice)) 
      Mouse_cntrl = ActionChains(driver) 
      Mouse_cntrl.release(driver.find_element_by_xpath("//input[starts-with(@id,'Price')]")) 
      value = newprice 
      print value 
      time.sleep(2) 
      print 'start' 
      print driver.find_element_by_xpath("//input[starts-with(@id,'NewItem_NewItem')]").get_attribute('data-id') 
      # ------------------------CLICK FAILS HERE ------------------------------ 
#   driver.find_element_by_xpath("//input[starts-with(@id,'NewItem_NewItem')]").click() 
#   driver.find_element_by_xpath("//input[starts-with(@id,'NewItem_NewItem')]").submit() 
      driver.find_element_by_xpath("//input[starts-with(@id,'NewItem_NewItem')]").send_keys(keys.ENTER) 
#   Mouse_cntrl.double_click(driver.find_element_by_xpath("//input[starts-with(@id,'NewItem_NewItem')]")) 
      for i in range(10): 
       try: 
        print driver.switch_to_alert().text 
        if driver.switch_to_alert(): 
         driver.switch_to_alert().accept() 
         break 
       except: pass 
       time.sleep(1) 
      else: 
       print "alert not found" 
      print 'finished -- ' 
      time.sleep(8) 
      driver.find_element_by_xpath("//input[starts-with(@id,'Product')]").click() 
      arg = newproduct 
      print 'end' 
      for i in range(60): 
       try: 
        if is_element_present(driver,By.LINK_TEXT,arg): break 
       except: pass 
       time.sleep(1) 
      else: self.fail("time out") 
    #  sel.mouse_over("//html/body/ul/li/a[.=\""+arg+"\"]") 
      driver.find_element_by_link_text(arg).click() 
      start = time.clock() 
      time.sleep(25) 
      for i in range(1000000): 
       try: 

        if newprice == float(driver.find_element_by_id('Unit_Price').text): 
         end = time.clock() 
         diff = end - start 
         log.log(module='Smoke',testcase='Action New', result='Pass',time_taken= diff) 
         break 
       except: pass 
      else: 
       log.log(module='Smoke',testcase='Action New', result='Fail') 
       self.fail('New Failure') 
      log.log(module='Smoke',testcase='On Submit', result='Pass',time_taken= diff) 
      driver.find_element_by_id('Quantity').send_keys(Keys.CONTROL+'a'+Keys.NULL,"1") 
      time.sleep(5) 
      start = time.clock() 
      for i in range(1000000): 
       try: 
        if value == float(driver.find_element_by_id('Unit_Price').text): 
         end = time.clock() 
         diff = end - start 
         log.log(module='Smoke',testcase='Multiply', result='Pass',time_taken= diff) 
         break 
       except: pass 
      else: self.fail("time out") 
      for i in range(1000000): 
       try: 
        if value == float(driver.find_element_by_id('Amount').text): 
         end = time.clock() 
         diff = end - start 
         log.log(module='Smoke',testcase='DSUM with Parent', result='Pass',time_taken= diff) 
         break 
       except: pass 
      else: 
       end = time.clock() 
       diff = end - start 
       log.log(module='Smoke',testcase='DSUM with Parent', result='Fail',time_taken= diff) 
       self.fail("time out") 

     except: 
      self.driver.quit() 
      e = sys.exc_info()[1] 
      print str(e) 

    def tearDown(self): 
     self.driver.quit() 
     self.assertEqual([], self.verificationErrors) 

if __name__ == "__main__": 
    unittest.main() 

विफल रहता है यह मेरे काम के लिए एक देखने लायक दृश्य हो गया है। किसी भी मदद की सराहना की जाती है। धन्यवाद

+0

कोड किस लाइन पर असफल रहा है? – Julian

+2

क्या सीएसएस चयनकर्ता के बारे में:। 'driver.find_element_by_css_selector (" इनपुट [आईडी * = NewItem_NewItem] ") पर क्लिक करें()' इसके अलावा, इस लाइन आप विशेषता देता है? 'प्रिंट driver.find_element_by_xpath (" // इनपुट [शुरू होता है-के साथ (@ आईडी, 'NewItem_NewItem')] ")। Get_attribute ('डेटा-आईडी')' यदि हां, तो वहाँ पृष्ठ लोड के बाद जावास्क्रिप्ट चल रहा है इस तत्व को प्रभावित कर सकता है? –

+0

पृष्ठ पुनर्लेखन के परिणामस्वरूप तत्व शायद किसी भी तरह से क्लिक के लिए 'तैयार' नहीं है। निर्धारित करें कि क्यों, लूप उस स्थिति में फैलता है या एक समय समाप्त होने तक। –

उत्तर

0

मैं className, cssSelector या कुछ अन्य तत्व खोजकर्ताओं की कोशिश करूंगा। यदि तत्व नहीं मिला है तो xPath कभी-कभी त्रुटियां प्रदान नहीं करता है। तो सबसे पहले यह पता लगाना शुरू करें कि क्या तत्व वास्तव में वेबड्राइवर द्वारा पाया जाता है।

आप click पर भी कोशिश कर सकते हैं या अन्य आदेशों का उपयोग दो बार पंक्ति में कर सकते हैं। इसने पहले से ही कुछ मुद्दों को हल किया है।

11

आप .click() को प्रतिस्थापित करने का प्रयास कर सकते हैं। send_keys("\n"), जो "किसी तत्व पर फ़ोकस करते समय एंटर दबाकर" है।

तो यह:

driver.find_element_by_link_text('PurchaseOrder').click() 

इस बन जाएगा:

driver.find_element_by_link_text('PurchaseOrder').send_keys("\n") 
3

मैं भी इस समस्या थी। कभी-कभी, किसी भी कारण से वेबड्राइवर बटन पर क्लिक नहीं करता था। यह बटन ढूंढने में सक्षम था (यह NoSuchElementException फेंक नहीं था और एक WebDriverWait मदद नहीं की थी)।

दो बार बटन क्लिक करने में समस्या यह थी कि यदि पहला क्लिक सफल होता है, तो दूसरा असफल हो जाता है (या अगले पृष्ठ पर सबमिट बटन पर क्लिक करें यदि उसे कोई मिलान मिल जाए!)। मेरा पहला प्रयास दूसरे क्लिक को एक कोशिश/ब्लॉक को छोड़ना था - इस तरह मैंने इसे अगले पृष्ठ पर सबमिट करने पर क्लिक किया। एक्सडी और यह वास्तव में मेरे परीक्षण को धीमा कर दिया जब यह दूसरा बटन नहीं मिला।

मुझे Selenium 2.0b3 IE WebDriver, Click not firing पर कुछ अच्छी अंतर्दृष्टि मिलीं। असल में, मैं पहले मूल तत्व पर क्लिक करता हूं, जो प्रतीत होता है कि कुछ भी नहीं करता है। फिर मैं सबमिट बटन पर क्लिक करता हूं।

6

यदि यह अभी भी किसी और के लिए आवर्ती समस्या है, तो यदि आपने पुष्टि की है कि आपका कोड सही है (आपने त्रुटियों आदि के लिए इसकी समीक्षा की है) और आपको अभी भी find_element_by_...('text').click() फ़ंक्शन ठीक से काम नहीं कर रहा है, तो अक्सर यह होता है जावास्क्रिप्ट से पहले चलने वाला आपका कोड पेज अपडेट कर सकता है।

time.sleep(2) 

निष्क्रिय टाइमर की अवधि हो सकता है आप जो कुछ भी चुनें:

एक सरल समाधान तो किसी भी click() तरीकों के तुरंत बाद नीचे दिए गए कोड को सम्मिलित import time है। मेरे मामले में मैंने 2 सेकंड का इस्तेमाल किया। उम्मीद है कि मदद करता है।

+2

ऐसा मत करो। स्थिर नींद के साथ अपने टेस्टकेस को प्रदूषित करने के बेहतर तरीके हैं –

+0

मुझे एहसास है कि यह अनुशंसित नहीं है, लेकिन यह मेरे लिए काम करता है और, यदि कुछ और नहीं, तो मेरा कोड क्यों काम नहीं कर रहा था, इसका कारण प्रदान किया गया। –

+0

स्थिर नींद भयानक हैं। उचित तरीके से इंतजार कैसे करें सीखें। – Moser

0

यदि आप जिस तत्व पर क्लिक करते हैं() एक यूआरएल है। मैंने पाया कि href गुणों को लेना और driver.get(elem.get_attribute('href')) का उपयोग करना सबसे साफ है।

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