为了实现页面数据分离,PageObject设计模式简化结构
代码结构:
action类:
# coding=utf-8
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
import unittest
import time
class action(unittest.TestCase):
def setUp(self):
print("--------------开始执行用例--------------")
def tearDown(self):
print ("--------------用例执行结束--------------")
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Chrome()
@classmethod
def tearDownClass(cls):
cls.driver.quit()
def find_element(self, loc):
try:
WebDriverWait(self.driver, 15).until(lambda driver: driver.find_element(*loc).is_displayed())
return self.driver.find_element(*loc)
except:
print("%s 页面未找到元素 %s" % (self, loc))
# def __init__(self, driver):
# self.driver = driver
def clear_keys(self, loc):
u"""重写清除文本内容的方法"""
time.sleep(1)
self.find_element(loc).clear()
def sent_keys(self, loc, value):
u"""重写输入文本信息"""
self.clear_keys(loc)
self.find_element(loc).send_keys(value)
def click_button(self, loc):
self.find_element(loc).click()
def open_url(self, url):
self.driver.get(url)
def get_text_msg(self, loc):
return self.find_element(loc).text
Login类:
# coding=utf-8
from selenium.webdriver.common.by import By
from Action import action
login_button = (By.LINK_TEXT, u'登录')
choose_login = (By.ID, 'TANGRAM__PSP_10__footerULoginBtn')
error_message = (By.ID, 'TANGRAM__PSP_10__error')
user_loc = (By.ID, 'TANGRAM__PSP_10__userName')
pwd_loc = (By.ID, 'TANGRAM__PSP_10__password')
submit = (By.ID, 'TANGRAM__PSP_10__submit')
verify_message = (By.ID, 'TANGRAM__39__content_msgtext')
class Login(action):
def click_login_button(self):
self.click_button(login_button)
def click_login_choose(self):
self.click_button(choose_login)
def click_submit(self):
self.click_button(submit)
def input_username(self):
self.sent_keys(user_loc, 'username')
def input_password(self):
self.sent_keys(pwd_loc, 'password')
def open_base_url(self, url):
self.open_url(url)
def get_msg(self):
return self.get_text_msg(verify_message)
CaseLogin类:
# coding=utf-8
from login_page import Login
import unittest
import time
import sys
reload(sys)
sys.setdefaultencoding('utf8')
class CaseLogin(Login, unittest.TestCase):
def test_login(self):
self.open_base_url('https://www.baidu.com')
self.click_login_button()
self.click_login_choose()
self.input_username()
self.input_password()
self.click_submit()
time.sleep(3)
text = self.get_msg()
print (text)
msg = u'您的帐号可能存在安全风险,为了确保为您本人操作,请先进行安全验证。'
self.assertEqual(text, msg)
if __name__ == '__main__':
unittest.main(verbosity=2)
看看这两行代码,之前没有加入时出现了编码报错。这里就是设置成编码格式为utf8。如果有出现类似的情况加入即可解决
reload(sys)
sys.setdefaultencoding('utf8')
运行正常结果: