Selenium Webdriver:(python)等待元素不存在(不工作)
Selenium Webdriver: (python) wait for element to not be present (not working)
我正在学习 Selenium 网络驱动程序并已开始使用 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")
您应该使用 ExpectedConditions 而不是检查该元素是否存在的代码。请阅读doc for waits。 presence_of_element_located() 可能是您感兴趣的那个。
你把 sleep 放错地方了,我相信这就是你想要的:
for i in range(60):
try:
if not self.is_element_present(By.CSS_SELECTOR, ".blockUI"):
break
else:
time.sleep(1)
except: pass
also in Python else after for 总是在循环成功结束后执行,难怪你每次都得到self.fail("time out")
我正在学习 Selenium 网络驱动程序并已开始使用 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")
您应该使用 ExpectedConditions 而不是检查该元素是否存在的代码。请阅读doc for waits。 presence_of_element_located() 可能是您感兴趣的那个。
你把 sleep 放错地方了,我相信这就是你想要的:
for i in range(60):
try:
if not self.is_element_present(By.CSS_SELECTOR, ".blockUI"):
break
else:
time.sleep(1)
except: pass
also in Python else after for 总是在循环成功结束后执行,难怪你每次都得到self.fail("time out")