2013-12-11 81 views
2

我正在使用Python中的Selenium Webdriver脚本,它只能部分地完成我想要的功能。我希望它通过一组测试用例,每个用自己的方法在课堂上进行。因此,在我的脚本的情况下,我希望它测试折扣表(test_add_discount),然后测试添加单元格(test_add_unit_type)。如何编写包含多个测试用例的Python Selenium测试脚本?

每次我运行它,我得到的只是第一个,然后它关闭消息;

冉1次测试中12.948s

如果我用-v参数详细的运行它,我还没有看到第二测试情况下,任何参考的。

这是我的脚本;

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.support.ui import Select 
from selenium.common.exceptions import NoSuchElementException 
import unittest, time, re 

class AdminTestCase(unittest.TestCase): 
    def setUp(self): 
     self.driver = webdriver.Firefox() 
     self.driver.implicitly_wait(30) 
     self.base_url = "http://mysite.local" 

    def test_discount_test_case(self): 
     driver = self.driver 
     driver.get(self.base_url + "/admin/login") 
     driver.find_element_by_id("username").clear() 
     driver.find_element_by_id("username").send_keys("admin") 
     driver.find_element_by_id("password").clear() 
     driver.find_element_by_id("password").send_keys("[email protected]") 
     driver.find_element_by_xpath("//button[@type='submit']").click() 
     driver.find_element_by_xpath("//li[4]/a/span").click() 
     driver.find_element_by_link_text("Add Discount").click() 
     driver.find_element_by_name("title").clear() 
     driver.find_element_by_name("title").send_keys("Selenium Test Discount") 
     driver.find_element_by_name("body").clear() 
     driver.find_element_by_name("body").send_keys("Test discount text") 
     driver.find_element_by_name("start_date").clear() 
     driver.find_element_by_name("start_date").send_keys("01/01/2014") 
     driver.find_element_by_name("end_date").clear() 
     driver.find_element_by_name("end_date").send_keys("01/03/2014") 
     driver.find_element_by_name("discount_percentage").clear() 
     driver.find_element_by_name("discount_percentage").send_keys("33") 
     driver.find_element_by_xpath("//button[@type='submit']").click() 

    def test_add_unit_type(self): 
     driver = self.driver 
     driver.get(self.base_url + "/maxsys/unit_types") 
     driver.find_element_by_link_text("Add Unit type").click() 
     driver.find_element_by_name("title").clear() 
     driver.find_element_by_name("title").send_keys("Selenium Test Unit Type") 
     driver.find_element_by_name("height").clear() 
     driver.find_element_by_name("height").send_keys("22.5") 
     driver.find_element_by_name("width").clear() 
     driver.find_element_by_name("width").send_keys("Non-numeric") 
     driver.find_element_by_name("depth").clear() 
     driver.find_element_by_name("depth").send_keys("Test discount text") 
     driver.find_element_by_name("body").clear() 
     driver.find_element_by_name("body").send_keys("unit type description") 
     driver.find_element_by_xpath("//button[@type='submit']").click() 


    def is_element_present(self, how, what): 
     try: self.driver.find_element(by=how, value=what) 
     except NoSuchElementException, e: return False 
     return True 

    def is_alert_present(self): 
     try: self.driver.switch_to_alert() 
     except NoAlertPresentException, e: return False 
     return True 

    def close_alert_and_get_its_text(self): 
     try: 
      alert = self.driver.switch_to_alert() 
      alert_text = alert.text 
      if self.accept_next_alert: 
       alert.accept() 
      else: 
       alert.dismiss() 
      return alert_text 
     finally: self.accept_next_alert = True 

if __name__ == "__main__": 
    unittest.main() 
+0

我注意到你没有'teardown()'方法,这可能是问题吗?我猜,因为我从来没有见过你在这里的问题。所有的测试用例方法都在其名称中有'测试',因此应该找到它们。 –

+0

我确实有tearDown(),但它只运行了第一次测试。你是说在这里我的方法是正确的吗? – charliefortune

+1

对于我所有的Webdriver测试,我都做了类似的事情,我使用了一个具有'setup'和'teardown'的基类,每个测试类都从中继承,但我认为这不会有所作为。 与Python一样,也许检查你的缩进?编辑:刚才看到你的答案,缩进它!当然,无论你的编辑器是什么空间,都可以节省很多像这样的麻烦。 –

回答

2

好吧,事实证明我的代码是好的。问题是Python的缩进规则。第二个测试案例中的缩进不是空格。我现在设置了我的编辑器来替换4个空格的制表符,并且它们都按预期运行。

相当令人生厌,而且比人眼更难看。但是,当我在互联网上发表关于Python缩进的发誓词时,我被告知我最终会学会爱它,所以我想保持开放的态度。

为了赶上这一点,从调用命令行的Python脚本,这将给有关混合空间和制表符的警告在Python 2

使用-tt时,我刚才了解了-t参数会将他们从警告升级为错误。

相关问题