2016-03-01 44 views
0

我正在學習Selenium Web驅動程序,並已開始使用python來測試網站。我在等待元素不存在代碼時遇到問題,因爲它似乎正在超時。Selenium Webdriver:(python)等待元素不存在(不工作)

這是我到目前爲止的代碼。

def test_(self): 
 
     driver = self.driver 
 
     driver.get(self.base_url + "/abc") 
 
     driver.find_element_by_id("UserName").clear() 
 
     driver.find_element_by_id("UserName").send_keys("username") 
 
     driver.find_element_by_id("Password").clear() 
 
     driver.find_element_by_id("Password").send_keys("password") 
 
     driver.find_element_by_id("loginbutton").click() 
 
     for i in range(60): 
 
      try: 
 
       if not self.is_element_present(By.CSS_SELECTOR, ".blockUI"): break 
 
      except: pass 
 
      time.sleep(1) 
 
     else: self.fail("time out") 
 
     driver.find_element_by_xpath(".//*[@id='ChangeTaskGridM']/table/thead/tr/th[1]/a").click() 
 
     for i in range(60): 
 
      try: 
 
       if not self.is_element_present(By.CSS_SELECTOR, ".blockUI"): break 
 
      except: pass 
 
      time.sleep(1) 
 
     else: self.fail("time out") 
 
     driver.find_element_by_xpath(".//*[@id='ChangeTaskGridM']/table/thead/tr/th[2]/a").click() 
 
     for i in range(60): 
 
      try: 
 
       if not self.is_element_present(By.CSS_SELECTOR, ".blockUI"): break 
 
      except: pass 
 
      time.sleep(1) 
 
     else: self.fail("time out")

我不知道爲什麼它超時。如果我刪除了blockUI,它會運行得更快,我也不想在兩者之間進行手動中斷。有任何想法嗎?

當前的代碼來檢測,而不是你的代碼is_element_present

for i in range(60): 
 
      try: 
 
       if not self.is_element_present(By.CSS_SELECTOR, ".blockUI"): break 
 
      except: pass 
 
      time.sleep(1) 
 
     else: self.fail("time out")

+0

請添加'is_element_present'的代碼 – Guy

+0

我已經在底部添加了它的說明 – Matt

+0

我的意思是執行'is_element_present',而不是你如何調用它。 – Guy

回答

1

來檢查,你應該使用ExpectedConditions該元素的存在。請閱讀doc for waits。 presence_of_element_located()可能是您感興趣的一個。

+0

我認爲這將工作,但我不再工作的腳本。謝謝! – Matt

0

你把睡在錯誤的地方,我相信這是你想要的東西:

for i in range(60): 
      try: 
       if not self.is_element_present(By.CSS_SELECTOR, ".blockUI"): 
        break 
       else: 
        time.sleep(1) 
      except: pass 

還的Python爲將循環的成功結束後總是否則執行後,難怪你self.fail( 「超時」)每次

相關問題