当前位置: 首页 > 面试题库 >

selenium随机超时异常,没有任何消息

钱建本
2023-03-14
问题内容

这是我正在尝试做的事情, 并且大多数时候我都成功了:基本上,我在网站上登录,然后等待一个类出现在源代码中,然后处理源代码。

我得到的例外:

Traceback (most recent call last):
File "foo.py", line 495, in <module>
report(login, password)
File "foo.py", line 430, in report
data = bar(login, password)
File "foo.py", line 113, in 
ui.WebDriverWait(browser, 10).until(lambda browser: browser.find_elements_by_class_name("the-class-i-want"))
File "/Library/Python/2.7/site-packages/selenium/webdriver/support/wait.py", line 71, in until
raise TimeoutException(message)
selenium.common.exceptions.TimeoutException: Message: ''

这是代码:

from selenium import webdriver
import contextlib
from selenium.webdriver.common.keys import Keys
import selenium.webdriver.support.ui as ui
from selenium.webdriver.support.wait import WebDriverWait

with contextlib.closing(webdriver.PhantomJS('phantomjs')) as browser:
    browser.get('mywebsite')
    login_form = browser.find_element_by_id('login-form')
    email = browser.find_element_by_name('login')
    password = browser.find_element_by_name('password')
    email.send_keys(login)
    password.send_keys(password)
    password.send_keys(Keys.RETURN)
    ui.WebDriverWait(browser, 10).until(lambda browser: browser.find_elements_by_class_name("the-class-i-want"))

我也尝试过这个:

wait_count = 0
    while wait_count < 6:
        print wait_count
        ui.WebDriverWait(browser, 10).until(lambda browser: browser.find_elements_by_class_name("the-class-i-want"))
        if browser.find_elements_by_class_name("the-class-i-want"):
            break
        wait_count += 1

我得到同样的例外。

我目前正在尝试:

wait_count = 0
while wait_count < 6:
    try:
        ui.WebDriverWait(browser, 10).until(lambda browser: browser.find_elements_by_class_name("the-class-i-want"))
        if browser.find_elements_by_class_name("the-class-i-want"):
            break
    except:
        wait_count += 1
        continue

我还没到失败的地步,我还在测试它。

抱歉,这很长。但是我想为这些随机超时找到一个pythonic干净的解决方案

另一个可能也有帮助的信息:登录过程有时会很长,但是即使等待几分钟,它也会引发异常。


问题答案:

这是我与Adam Goucher联系后得到的答案:

from selenium import webdriver
import contextlib
from selenium.webdriver.common.keys import Keys
import selenium.webdriver.support.ui as ui
from selenium.webdriver.support.wait import WebDriverWait


def waiter(browser):
    elements = browser.find_elements_by_class_name('the-class-i-want')
    if len(elements) != 0:
        return elements
    return False

with contextlib.closing(webdriver.PhantomJS('phantomjs')) as browser:
    browser.get('mywebsite')
    login_form = browser.find_element_by_id('login-form')
    email = browser.find_element_by_name('login')
    password = browser.find_element_by_name('password')
    email.send_keys(login)
    password.send_keys(password)
    password.send_keys(Keys.RETURN)
    ui.WebDriverWait(browser, 10).until(waiter)

这工作得很好!



 类似资料:
  • 我使用Infinispan作为hibernate二级缓存。在正常负载系统中运行,没有问题。但是,当加载到系统中时,从缓存集群引发了以下异常。尽管这不会造成功能影响,但报告错误似乎是一个问题。 Infinispan版本:5.3 关于测试的更多信息:这个hibernate二级缓存集群有四个节点。在测试期间,我没有更新缓存(缓存中的实体没有更新)。在四个节点中,两个节点大量使用了缓存。但我在其他两个节点

  • 我偶尔得到取消错误时,调用gRPC方法。 以下是我的客户端代码(使用grpc java 1.22.0库): 当我调用方法时,它通常是有效的。客户端发送消息,服务器接收消息时不会出现问题。 但这个电话偶尔会给我一个错误: 奇怪的是,即使调用在客户端给出了一个错误,服务器还是会收到请求,大部分情况下。但有时服务器会错过它。 它甚至没有超过异常,它只是抛出。没有提供其他描述,因此我无法理解为什么会发生这

  • 我试图在不同的事务中更新同一行,以理解Hibernate的乐观锁定。 但是我没有得到任何StaleObjectStateException或任何其他异常。 我已经在我正在尝试执行的操作上方附加了代码。请让我知道..我错过了什么吗? 或者乐观锁定与我正在尝试做的事情不同。 在上面的代码中,我启动了两个线程“早些时候”和“晚些时候”,它们都从会话工厂获取会话对象,并从数据库加载相同的记录并同时更新它。

  • 我在非GUI模式下为100个并发用户运行了一个脚本 我在运行期间保存了生成的 JTL 文件 运行完成后,我在查看结果树侦听器中加载了JTL文件,我可以看到如下错误: 响应代码: 非 HTTP 响应代码: 套接字超时异常 响应消息: 非 HTTP 响应消息: 读取超时 响应代码:非HTTP响应代码:Java . net . connect异常响应消息:非HTTP响应消息:连接超时:连接 我的JMet

  • Selenium C#在抛出超时异常之前等待的最大显式超时是多少? 有时我们正在测试的应用程序变得非常慢,最多需要4分钟才能加载。我想添加一个等待时间,这样它最多会等待5分钟。 我已经尝试过这个代码 但是它在2分钟左右抛出超时异常。

  • 我正在处理检查的异常,并在两者之间发现编译器在检查的异常上没有显示任何错误并且工作正常的情况。 请让我知道原因,我谷歌了很多,但没有找到任何东西。