我正在学习Selenium Web驱动程序,并已开始使用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 :(得分:1)
您应该使用ExpectedConditions代替您的代码来检查该元素的存在。请阅读doc for waits。 presence_of_element_located()可能是您感兴趣的。
答案 1 :(得分: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之后,for after将在循环成功结束后执行,难怪你每次都得到self.fail(“超时”)