温柔地对待我,我不是程序员!刚开始使用Selenium进行一些测试,我想要做的是回收代码,所以我不必重复和维护它。所以我有以下,完美的工作;
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
from mappings.home_mapping import *
from common.config import uname, pswd, baseurl
import unittest
import base64
class MyLogin(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.implicitly_wait(30)
self.base_url = baseurl
self.verificationErrors = []
self.accept_next_alert = True
def test_login(self):
driver = self.driver
driver.get(self.base_url + "myurl/")
driver.find_element_by_xpath(el_username).clear()
driver.find_element_by_xpath(el_username).send_keys(base64.b64decode(uname))
driver.find_element_by_xpath(el_password).clear()
driver.find_element_by_xpath(el_password).send_keys(base64.b64decode(pswd))
driver.find_element_by_xpath(el_signin).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
def tearDown(self):
self.driver.quit()
self.assertEqual([], self.verificationErrors)
if __name__ == "__main__":
unittest.main()
这只会打开一个新的Firefox实例,将我带到登录页面并登录。然后关闭Firefox实例。
我可以通过以下方式从另一个测试中调用该测试;
from common import login
unittest.main(module = login)
我想要做的是调用相同的测试,因此它会让我登录,但保持窗口打开,这样我就可以在其他测试中继续执行更多步骤。原因是我可能要运行50个测试,每个测试都要求我在导航到应用程序的相应部分之前登录进行测试。
答案很简单,不使用我的登录测试,而是创建另一个运行登录部分并从我的其他测试中调用的模块?或者你们可以做些更智能的事情。