使用显示等待报超时

问题

使用显示等待报超时

报错信息

test_halos1.py:16 (Test_Sample.test_loginsuccess)
self = <test_halos1.Test_Sample object at 0x000001ED9DE7BAF0>

def test_loginsuccess(self):
    self.driver.find_element(By.CSS_SELECTOR,'#app > div > form > div.login-right > div > div:nth-child(2) > div > div.el-input.el-input--medium.el-input--prefix > input').send_keys('wangsa')
    self.driver.find_element(By.CSS_SELECTOR,'[type="password"]').send_keys('halosss@2022_!')
    self.driver.find_element(By.CSS_SELECTOR,'[class="login-button-text"]').click()
  WebDriverWait(self.driver,1).until(expected_conditions.visibility_of_element_located((By.CSS_SELECTOR,'[class ="production-title"]')))

test_halos1.py:21:


self = <selenium.webdriver.support.wait.WebDriverWait (session=“efb624fdbc8ec8542f9b663fa0647068”)>
method = <function visibility_of_element_located.._predicate at 0x000001ED9DEDA4C0>
message = ‘’

def until(self, method, message: str = ""):
    """Calls the method provided with the driver as an argument until the \
    return value does not evaluate to ``False``.

    :param method: callable(WebDriver)
    :param message: optional message for :exc:`TimeoutException`
    :returns: the result of the last call to `method`
    :raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
    """
    screen = None
    stacktrace = None

    end_time = time.monotonic() + self._timeout
    while True:
        try:
            value = method(self._driver)
            if value:
                return value
        except self._ignored_exceptions as exc:
            screen = getattr(exc, 'screen', None)
            stacktrace = getattr(exc, 'stacktrace', None)
        time.sleep(self._poll)
        if time.monotonic() > end_time:
            break
  raise TimeoutException(message, screen, stacktrace)

E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E Backtrace:
E Ordinal0 [0x011078B3+2193587]
E Ordinal0 [0x010A0681+1771137]
E Ordinal0 [0x00FB41A8+803240]
E Ordinal0 [0x00FE24A0+992416]
E Ordinal0 [0x00FE273B+993083]
E Ordinal0 [0x0100F7C2+1177538]
E Ordinal0 [0x00FFD7F4+1103860]
E Ordinal0 [0x0100DAE2+1170146]
E Ordinal0 [0x00FFD5C6+1103302]
E Ordinal0 [0x00FD77E0+948192]
E Ordinal0 [0x00FD86E6+952038]
E GetHandleVerifier [0x013B0CB2+2738370]
E GetHandleVerifier [0x013A21B8+2678216]
E GetHandleVerifier [0x011917AA+512954]
E GetHandleVerifier [0x01190856+509030]
E Ordinal0 [0x010A743B+1799227]
E Ordinal0 [0x010ABB68+1817448]
E Ordinal0 [0x010ABC55+1817685]
E Ordinal0 [0x010B5230+1856048]
E BaseThreadInitThunk [0x7719FA29+25]
E RtlGetAppContainerNamedObjectPath [0x774D7A9E+286]
E RtlGetAppContainerNamedObjectPath [0x774D7A6E+238]

C:\Users\wangsa\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\support\wait.py:90: TimeoutException

环境

超时就检查下定位,肯定元素都没找到。

元素是正确的,
我操作的场景是:超时机制设置的1S,一开始运行没有问题。隔两天再去运行报的超时。
报超时后我把超时时间改成2S,运行是可以的。再把超时时间改成1S也是可以的。
不知道是不是第一次登陆页面响应比较慢的原因?

显示等待正常超时时间不会设这么短,至少有个5/6秒吧,页面1s 加载不完可太正常了。你自己逛淘宝 B站可以留意一下

可能是因为cookie信息吧,第一次访问的时候,你浏览器是没有cookie信息的,需要在你浏览器存一些数据,就类似于登录信息之类的。下一次访问直接去本地找cookie信息就好了,自然运行速度也会快。

不过显示等待不需要设置那么短,毕竟他是针对元素去循环查找的,而不是整个页面。如果是强制等待或者隐示等待就可以设置短一些

嗯感谢