带有EC.presence_of_element_located的Python Selenium WebDriverWait突然超时,尽管没有任何变化

时间:2016-02-26 21:28:15

标签: python django selenium

由于Selenium,我再次面临恼人的问题。这一次,过去的测试不再通过,因为超时发生的超时(或者看起来似乎如此)。我在Django + Docker Compose项目中使用Python Selenium,对于测试,项目使用selenium容器,其映像为selenium/standalone-firefox。在tests.py中,Selenium测试的驱动程序初始化为:

# WebDriver is imported as from selenium.webdriver.remote.webdriver import WebDriver
self.driver = WebDriver("http://selenium:4444/wd/hub", desired_capabilities={'browserName': 'firefox'})

在这些测试中,有许多形式的行:

elem = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, "name_of_elem"))) # the wait time and the By vary, i.e. sometimes it is By.ID

这些行以前工作正常,但是现在每个具有这种行的测试都会失败。为了确保我没有改变当前开发分支中的任何内容来实现这一点,我切换到了项目的主分支,几天前成功通过了测试。但是,在本地测试时,即使在主分支上也会发生相同的确切错误。该项目通常以docker-compose.yml运行,排除selenium容器(因为selenium容器经常导致docker-compose up失败)并且测试使用{{1}运行这包括docker-compose-test.yml容器链接到的容器(web容器运行Django服务器)。

有谁知道为什么突然会有超时?增加等待时间无效。只是为了进行健全性检查,我在启动服务器后打开了网页,并手动验证了元素没有突然消失。在运行服务器并在浏览器中使用网页时,测试中查找的元素仍然存在,但显然Selenium在测试运行中无法再找到它们。这怎么会突然发生?我在Travis中进行了一次能够成功通过的测试(在Travis中,使用的驱动程序只是Firefox(),而不是web,而不是用于本地测试的from selenium.webdriver import Firefox;这让我想知道用于from selenium.webdriver.remote.webdriver import WebDriver容器的图像是否突然出错。

我尝试过的一件事也没有用到将驱动程序更改为Chrome。因此,例如,如果我将selenium容器的图像更改为selenium并按如下所示初始化驱动程序:

selenium/standalone-chrome

然后我得到了这个webdriverlocation = os.environ.get("SELENIUM_PORT_4444_TCP_ADDR") self.driver = WebDriver("http://" + str(webdriverlocation) + ":4444/wd/hub", desired_capabilities={'browserName': 'chrome'})

WebDriverException

对我来说没有多大意义,因为我已经拉了必要的图像。如果我将URL部分保留为Traceback (most recent call last): File "/code/smaker/tests.py", line 574, in setUp self.driver = WebDriver("http://" + str(webdriverlocation) + ":4444/wd/hub", desired_capabilities={'browserName': 'chrome'}) File "/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 87, in __init__ self.start_session(desired_capabilities, browser_profile) File "/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 141, in start_session 'desiredCapabilities': desired_capabilities, File "/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 201, in execute self.error_handler.check_response(response) File "/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 188, in check_response raise exception_class(message, screen, stacktrace) WebDriverException: Message: The path to the driver executable must be set by the webdriver.chrome.driver system property; for more information, see https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver. The latest version can be downloaded from http://chromedriver.storage.googleapis.com/index.html ,则会发生同样的事情。

0 个答案:

没有答案