11、selenium之PageObject设计模式

为了实现页面数据分离,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')

运行正常结果:

猜你喜欢

转载自blog.csdn.net/qq969887453/article/details/89323139