Django + Selenium测试在有和没有覆盖的情况下给出不同的结果

时间:2014-04-17 01:33:51

标签: python django unit-testing selenium

如果我使用coverage运行测试,则硒测试失败。如果我使用python manage.py test ...运行它们,则此测试通过。

我有一个测试套件,包括一些普通的python / django测试以及一些使用Selenium的测试。 CustomWebDriver()是selenium.webdriver.firefox.webdriver的子类。

class WebDriverITTTests(LiveServerTestCase, Someothermixins):
    @classmethod
    def setUpClass(cls):
        cls.webdriver = webdriver.CustomWebDriver()
        super(WebDriverITTTests, cls).setUpClass()

    def test_instructions_logic(self):
        ...
        login, check that some things happened on the server side
        open a page, check for "#some_element" loaded via ajax
        ...

我在覆盖范围内运行时test_instructions_logic测试失败,因为它无法找到"#some_element"

覆盖率命令:coverage run --source mymodule.subapp manage.py test mymodule.subapp --settings myproj.settings

Manage.py命令:python manage.py test mymodule.subapp --settings myproj.settings

为什么这两种情况下的测试结果不同?

1 个答案:

答案 0 :(得分:1)

我明白了。我使用this作为参考,问题是......

  1. 当使用Selenium find_element_by_blah()时,如果元素是通过Ajax加载的,则需要等到它被加载后再查找它。因此链接中的wait_for_css()方法。 (我确实使用了这种方法)。
  2. 运行manage.py测试运行器和coverage test之间的差异可能是由于时间 - 如果我在检查元素之前添加了time.sleep(2),则测试将在两种情况下通过
  3. 但为什么wait_for_css方法不能阻止这个问题?
  4. 因为我天真地创建了NoSuchElementException,就像

    一样
    class NoSuchElementException(Exception)
        pass
    

    而不是导入它:from selenium.common.exceptions import NoSuchElementException(因此来自链接的find_css方法引发了与Selenium期望的不同的异常,并且失败并退出而不是等待。

    < / LI>

    Oy公司。