首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >硒隐式和显式等待不工作/没有影响

硒隐式和显式等待不工作/没有影响
EN

Stack Overflow用户
提问于 2018-07-14 00:49:01
回答 4查看 11.7K关注 0票数 11
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.Firefox()
driver.get("https://google.com")

#driver.implicitly_wait(10)

WebDriverWait(driver,10)

print("waiting 10 sec")

driver.quit()

它只是在页面加载后退出。等待根本没有效果!

演示:https://www.youtube.com/watch?v=GocfsDZFqk8&feature=youtu.be

任何帮助都将不胜感激。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-07-14 01:03:27

如果您希望暂停10秒,请使用time.sleep()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import time

time.sleep(10) # take a pause 10 seconds

注意: WebDriverWait(driver,10)不是那样工作的。相反,您可以这样使用它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

# this will wait at least 10 seconds until url will contain "your_url"
WebDriverWait(driver, 10).until(EC.url_contains(("your_url")))

但是它不会完全等待10秒,直到expected_conditions满意为止。

还:作为源代码告诉我们:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def implicitly_wait(self, time_to_wait):
    """
    Sets a sticky timeout to implicitly wait for an element to be found,
       or a command to complete. This method only needs to be called one
       time per session. To set the timeout for calls to
       execute_async_script, see set_script_timeout.

    :Args:
     - time_to_wait: Amount of time to wait (in seconds)

    :Usage:
        driver.implicitly_wait(30)
    """
    ...

driver.implicitly_wait(10)也用于等待元素,而不是暂停脚本。

PS:使用WebDriverWait而不是硬暂停总是一种很好的实践,因为使用WebDriverWait测试会更快,因为您不需要等待所有的时间,而只能等到expected_conditions满意为止。正如我所理解的,目前您只是在四处游玩,但是对于未来,WebDriverWait更适合使用。

票数 15
EN

Stack Overflow用户

发布于 2021-10-03 22:02:33

至少使用Python和Chrome驱动程序,我的经验是,即使使用WebDriverWait,您仍然需要使用time.sleep才能可靠地工作。使用implicitly_wait不起作用。我需要把time.sleep(1)放在每次手术之后,否则有时事情就不会启动。

票数 3
EN

Stack Overflow用户

发布于 2018-07-14 06:02:57

通过使用这个WebDriverWait(driver,10),您已经声明了显式等待。这只是声明,您根本没有使用显式等待。

为了使用显式等待,必须将上述代码绑定到EC (即Expected condition )。

类似于:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wait = WebDriverWait(driver,10)
element = wait.until(EC.element_to_be_clickable((By.NAME, 'q')))
element.send_keys("Hi Google")  

您可以引用此链接获取显式等待显式等待

注意,time.sleep(10)是显式等待的worst/extreme类型,它将条件设置为等待的确切时间。有一些方便的方法可以帮助您编写只在需要时等待的代码。WebDriverWait与ExpectedCondition的结合是实现这一目标的一种方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51336849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文