2016-03-01 145 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( “超时”)每次