本文章主要讲如果进行多模块之间的自动化操作。
1.将登录模块封装成一个公共类:
#!/usr/bin/python # -*- coding:utf-8 # 用户登录 class login(): # 登录 def test_login(driver): try: # 访问登录界面,进行登录操作 url = "http:****.html" driver.get(url) # 设置隐式等待时间 driver.implicitly_wait(30) # 获取账号元素,输入内容 driver.find_element_by_name("user_name").clear() driver.find_element_by_name("user_name").send_keys(u"****") # 获取密码元素,输入内容 driver.find_element_by_id("password").send_keys("123456") # 点击登录按钮 driver.find_element_by_id("login_submit").click() url = "****"# 登陆成功跳转 if(driver.current_url != url): driver.get_screenshot_as_file(u"E:\\截图\\登录跳转界面错误.jpg") # 失败截图 else: print(u"成功") except: driver.get_screenshot_as_file(u"E:\\截图\\Login.jpg") # 失败截图
2.在其他类当中调用登录方法
import unittest from Selenium.unilt.Login import login from selenium import webdriver # 用户充值模块 class recharge(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() self.driver.implicitly_wait(30) # 充值 def test_recharge(self): driver = self.driver login.test_login(driver) # 首页执行登录操作 # 进行充值操作 try: driver.find_element_by_link_text(u"立即充值").click() url = "****" # 充值界面跳转 url if driver.current_url != url: driver.get_screenshot_as_file(u"E:\\截图\\充值跳转失败.jpg") else: # 操作页面元素 driver.find_element_by_id("txt_money").clear() driver.find_element_by_id("txt_money").send_keys(u"1000") driver.find_element_by_class_name("bank-card-number").click() driver.find_element_by_class_name("btn-green").click() # 操作弹出框元素 driver.find_element_by_id("send_phone").send_keys("****") driver.find_element_by_id("send_btn").click() driver.find_element_by_id("verify_send").send_keys("1234") driver.find_element_by_id("confirm_submit").click() url = "" # 充值成功跳转界面 if driver.current_url != url: driver.get_screenshot_as_file(u"E:\\截图\\充值成功界面跳转错误.jpg") # 失败截图 else: print("充值成功") except: driver.get_screenshot_as_file(u"E:\\截图\\chongzhi.jpg") # 失败截图 def tearDown(self): self.driver.close() self.driver.quit()
该类中不存在任何 url 地址,因为在登录当中已经定义过。登录成功后,界面会自动跳转一个新的 url 地址。所以正常脚本当中是不需要去定义很多 url 地址的。url 地址通常用来判断跳转的界面是否正确。
上述例子为,用户登录成功后,前往充值。
主要为在充值脚本当中调用 login 方法,传递 driver 参数。其余和普通的脚本基本保持一致。如果还如要嵌套更多的方法,步骤统一如上所述。