Selenium Webdriver - NoSuchElementExceptions

Gen*_*gar 4 python selenium webdriver

我正在使用pylen单元测试库(unittest)和selenium webdriver.我试图通过它的名字找到一个元素.大约一半的时间,测试抛出NoSuchElementException,另一次不抛出异常.

我想知道它是否与selenium webdriver没有等待足够长的页面加载.

Teh*_*ris 10

driver = webdriver.WhatEverBrowser()
driver.implicitly_wait(60) # This line will cause it to search for 60 seconds
Run Code Online (Sandbox Code Playgroud)

它只需要在你的代码中插入一次(我通常在创建webdriver对象后立即执行)

例如,如果您的页面出于某种原因需要30秒才能加载(购买新服务器),并且该元素是页面上显示的最后一个内容之一,它几乎就是不断检查一遍又一遍,如果元素在那里持续60秒,然后如果它没有找到它,它会抛出异常.

还要确保你的范围是正确的,即:如果你专注于一个框架,并且你正在寻找的元素不在那个框架中,它将找不到它.

  • `driver.get()`是一个阻塞操作; webdriver浏览器插件不会响应调用客户端(使用您选择的语言绑定),直到驱动程序确定页面已完全加载为止,基本上所有GET都已返回并且DOM已完成.但是,如果您有异步内容(在初始页面加载完成后修改DOM等的JS),您可能需要等待一个元素,因为它不会在初始完成的DOM中.设置全局隐式等待是一种快速修复,但如果测试运行时对您很重要,则可能会产生负面影响. (4认同)

era*_*ran 5

我也看到了.我所做的只是等待......

你可以尝试:

while True:
    try:
        x = driver.find_by_name('some_name')
        break
    except NoSuchElementException:
        time.sleep(1)
        # possibly use driver.get() again if needed
Run Code Online (Sandbox Code Playgroud)

此外,尝试使用更新您的selenium到最新版本 pip install --update selenium