【问题标题】:Waiting for hidden element to appear with selenium python等待隐藏元素与 selenium python 一起出现
【发布时间】:2022-01-19 12:15:45
【问题描述】:

为了解释上下文,让我们以登录页面为例。

假设登录页面只允许用户在输入用户名后等待1分钟后输入密码(请假设)。

因此,首先只有用户名字段将在页面上可见。然后 1 分钟后,密码将可见。但是当页面加载时,这两个字段都存在于 HTML 中,并且当它隐藏和等待时间后它可见时,字段 ID 不会改变。

因此,以下代码在第二次操作(密码)时给出“元素不可交互”错误。

WebDriverWait(browser,10).until(EC.presence_of_element_located((By.ID, 'username'))).send_keys(usr)
WebDriverWait(browser,70).until(EC.presence_of_element_located((By.ID, 'password'))).send_keys(pwd)

如果我一次运行此代码一行,同时手动等待密码字段加载到页面上,则该代码有效。而且等待时间是60秒我已经计时了。

但是我将所有内容作为一个文件一起运行,然后它几乎在 2 秒内给出了元素不可交互的错误。可能是因为until 会立即找到元素 ID,即使它隐藏在 UI 中,但存在于 HTML 中。

我们如何处理这种延迟?

【问题讨论】:

    标签: python python-3.x selenium webdriverwait


    【解决方案1】:

    您应该将presence_of_element_located 更改为visibility_of_element_located

    WebDriverWait(browser,100).until(EC.visibility_of_element_located((By.ID, 'username'))).send_keys(usr)
    WebDriverWait(browser,100).until(EC.visibility_of_element_located((By.ID, 'password'))).send_keys(pwd)
    

    应该可以。
    有几个预期条件。
    从他们的名字可以看出,presence_of_element_located 正在等待 存在 元素与传递的定位器匹配,而 visibility_of_element_located 将等待该元素的可见性
    通常,您应该始终使用visibility_of_element_located,因为此方法正在等待元素变得可见和可交互,而presence_of_element_located 将返回尚未完全呈现的元素等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-07
      • 2018-08-09
      • 2021-05-20
      • 2022-06-22
      • 1970-01-01
      • 1970-01-01
      • 2019-05-31
      相关资源
      最近更新 更多