【问题标题】:Python-Selenium won't wait for my website to refresh?Python-Selenium 不会等待我的网站刷新?
【发布时间】:2015-01-19 14:07:05
【问题描述】:

我正在尝试测试已登录的用户是否可以注销。

告诉 Selenium 我已经登录了我cookie-jack the sessionid,就像这样:

@step(r'I am logged in as "(\w*)"')
def log_in(step, name):
    can_login = world.client.login(username=name, password=name)
    if can_login:
        session_key = world.client.cookies['sessionid'].value
        world.browser.add_cookie({'name':'sessionid', 'value':session_key})
        world.browser.get(world.browser.current_url)
        from time import sleep    #Really should have to do this
        sleep(100)
    else: 
        raise Exception("Could not login with those credentials")

我需要刷新 html 才能在“登录”时更改,但 selenium 需要很长时间才能刷新页面(它在 localhost 上,我知道这可能会出现问题)。我的terrain.py 中确实有一个隐含的等待:

world.browser.implicitly_wait(10)

但我认为它不会生效。如何告诉 selenium 每次都等待页面加载?

【问题讨论】:

    标签: python selenium selenium-webdriver


    【解决方案1】:

    隐式等待无济于事,因为它只是告诉在查找元素时要等待多长时间。

    相反,对于页面加载后出现的元素,您需要 explicitly wait

    world.browser.get(world.browser.current_url)
    
    element = WebDriverWait(world.browser, 50).until(
        EC.presence_of_element_located((By.ID, "header"))
    )
    

    这将告诉 selenium 最多等待 50 秒,每 500 毫秒检查一次元素是否存在,将其视为轮询。

    【讨论】:

    • 我应该在我的设置中仍然使用隐式等待还是多余的?我也可以只使用 world.browser.refresh() 吗?
    • @Pureferret 隐式等待适用于您没有明确等待的情况 - 如果不会使其变慢并有所帮助,您可以离开它。我不完全确定你到底发生了什么 - 没有足够的信息可以说更多..
    • 很公平。我听说 selenium 使用 localhost 会很慢,但我已经按照我可以看到的所有步骤进行操作,但没有看到任何加速。
    猜你喜欢
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多