为什么测试在失败时通过 - Selenium / Python

时间:2015-03-17 14:25:17

标签: python selenium

我使用的是Python 2.7.8和Selenium 2.45.0。我将在这个问题中使用Amazon.com作为我的例子。我的测试看起来像这样:

class Test1(unittest.TestCase):
    def testStep1(self):
        self.browser = webdriver.Firefox()
        self.browser.get("http://www.amazon.com")
        if self.browser.find_element_by_link_text('Amazon'):
            assert(True)
        else:
            assert(False)

    def testStep2(self):
        self.browser.find_element_by_css_selector('#nav-link-shopall').click()
        directory_span = self.browser.find_elements_by_xpath('//*[@id="siteDirectoryHeading"]')
        for span in directory_span:
            if "EARTH'S BIGGEST SELECTION" in span.text:
                assert(True)
            else:
                assert(False)

发生的事情是,单击该按钮时,它不会转到所需的页面。正因为如此,地球的最大选择"" EARTH&B'BIGGEST SELECTION"永远不会显示,但断言说它已经过去了。它为什么这样做?

注意:我更改了代码,现在正按预期工作。我把上面改为:

    def testStep2(self):
        (webdriver.ActionChains(self.browser)).double_click(self.browser.find_element_by_id('nav-link-shopall')).perform()
        directory = self.browser.find_element_by_id('siteDirectoryHeading').text
        if "EARTH'S BIGGEST SELECTION" in directory:
            assert(True)
        else:
            assert(False)

代码现在找到directory_span文本并按预期传递。感谢您的投入和帮助!我只是没有意识到我需要double_click()来代替click()

1 个答案:

答案 0 :(得分:0)

您的问题是,如果self.browser.find_elements_by_xpath('//*[@id="siteDirectoryHeading"]')找不到任何元素,则不会出现错误,而是空列表

这是实际发生的事情 - directory_span是一个空列表,并且永远不会执行正文循环。这就是你看到测试通过的原因。