【问题标题】:Wait for element present in Python等待 Python 中存在的元素
【发布时间】:2017-06-23 01:05:41
【问题描述】:

我有一个正在运行的代码,但有时我会在 30 秒内超时,有时会在 80 秒或更多(取决于服务器端),所以重点是 - 如何让我的代码在我可以查看元素后停止而不是等到 120 秒过去? 好吧,我想要实现的是在屏幕上没有显示元素时停止代码:

 def isElementPresent(self):
        try:
            wait = WebDriverWait(self.driver, 120)
            wait.until(EC.invisibility_of_element_located((By.NAME, 'GETTING NEW IMAGE FROM HOME SYSTEM')))
        except TimeoutException:
            print('Camera Timeout')

【问题讨论】:

  • 什么是'GETTING NEW IMAGE FROM HOME SYSTEM'?每个循环的值都改变了吗?我只是好奇你为什么需要那个循环。
  • 不,这个名字一直都是一样的。只是随着相机改变图像而出现和消失
  • 我不敢相信有时你会在 30 或 80 秒内超时。当它进入循环时,它将等待元素 120 秒。如果找到该元素,它将立即打破while 循环。否则,它将打印“相机超时”,然后进入下一个循环,并等待该元素 120 秒。再次。关键是超时错误总是在 120 秒。但是打破循环的时间取决于找到元素需要多长时间。
  • 是的,我不想一直等待 120 秒,因为它可能需要更少的时间,但程序仍在等待。
  • 你在哪里打电话给isElementPresent?你能显示更多代码吗?

标签: python selenium timeout


【解决方案1】:

您需要删除 while 循环。只需使用 WebDriverWait

def isElementPresent(self):
    wait = WebDriverWait(self.driver, 120)
    try:
        wait.until(EC.presence_of_element_located((By.NAME, 'GETTING NEW IMAGE FROM HOME SYSTEM')))
    except TimeoutException:
        print('The element appears')
    try:
        wait.until(EC.invisibility_of_element_located((By.NAME, 'GETTING NEW IMAGE FROM HOME SYSTEM')))
    except TimeoutException:
        print('The element does not disappear')

【讨论】:

  • 试过这个,仍然等待 120 秒,但是元素在那个时间之前已经消失了
  • 对不起。你会等到元素消失吗?
  • 抱歉造成误会。我等到我看到元素。然后我等到它消失了,是的
【解决方案2】:

documentation,尝试visibility_of_element_located 条件:

def isElementPresent(self):
    while True:
        try:
            wait = WebDriverWait(self.driver, 120)
            wait.until(EC.visibility_of_element_located((By.NAME, 'GETTING NEW IMAGE FROM HOME SYSTEM')))
            break
        except TimeoutException:
            print('Camera Timeout')
            pass

【讨论】:

    猜你喜欢
    • 2016-06-14
    • 2016-12-25
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 2011-12-03
    • 2016-12-29
    相关资源
    最近更新 更多