unittest对本站进行基于PO模型的selenium的自动化测试

用户自动注册
用户自动登录
自动发文
查看文章列表
查看刚发布文章

PO模型代码

from time import sleep
from selenium.webdriver.common.by import By
class BasePage:
    def __init__(self,driver=None,baseurl=None):
        self.driver=driver
        self.baseurl=baseurl
        self.open_page()

    def open_page(self):
        self.driver.maximize_window()
        self.driver.implicitly_wait(10)
        self.driver.get(self.baseurl)
        # 完整后自动截图,自定义路径,下同
        self.driver.get_screenshot_as_file()
        sleep(3)

    def close_page(self):
        self.driver.get_screenshot_as_file()
        return self.driver.close()

    def quit_driver(self):
        self.driver.get_screenshot_as_file()
        return self.driver.quit()

    def find_element(self,by,element):
        sleep(1)
        return self.driver.find_element(by,element)

    def find_elements(self,by,element):
        sleep(1)
        return self.driver.find_elements(by,element)

    def switch_alert(self):
        sleep(1)
        return self.driver.switch_to.alert


class LoginPage(BasePage):
    def username(self):
        return self.find_element(By.ID, 'username')

    def password(self):
        return self.find_element(By.ID, 'password')

    def submit(self):
        return self.find_element(By.ID, 'submit')

    def login(self, username, password):
        self.username().send_keys(username)
        self.password().send_keys(password)
        # 完整后自动截图,自定义路径
        self.driver.get_screenshot_as_file()
        self.submit().click()

class RegisterPage(BasePage):
    def username(self):
        return self.find_element(By.ID,'username')
    def nickname(self):
        return self.find_element(By.ID, 'nickname')
    def password(self):
        return self.find_element(By.ID, 'password')
    def confirm_password(self):
        return self.find_element(By.ID, 'confirm_password')
    def checkcode(self):
        return self.find_element(By.ID, 'checkcode')

    def submit(self):
        return self.find_element(By.ID, 'submit')

    def register(self,username,nickname,password,checkcode):
        self.username().send_keys(username)
        self.nickname().send_keys(nickname)
        self.password().send_keys(password)
        self.confirm_password().send_keys(password)
        self.checkcode().send_keys(checkcode)
        self.driver.get_screenshot_as_file()
        self.submit().click()


class ArticlePage(BasePage):
    def title(self):
        return self.find_element(By.ID,'title')

    def shortcut(self):
        return self.find_element(By.ID, 'shortcut')

    def content(self):
        return self.find_element(By.CLASS_NAME, 'cke_editable')

    def source(self):
        return self.find_element(By.ID, 'source')

    def link(self):
        return self.find_element(By.ID, 'link')

    def imglink(self):
        return self.find_element(By.ID, 'imglink')

    def date(self):
        return self.find_element(By.ID, 'date')

    def submit(self):
        return self.find_element(By.ID, 'submit')

    def linking(self,link_text):
        return self.find_element(By.LINK_TEXT,link_text)

    def article(self,title,shortcut,content,source,link,imglink,date,returnurl):
        self.driver.implicitly_wait(20)
        self.title().send_keys(title)
        self.shortcut().send_keys(shortcut)

        self.driver.switch_to.frame(0)
        self.content().send_keys(content)
        self.driver.switch_to.default_content()

        self.source().send_keys(source)
        self.link().send_keys(link)
        self.imglink().send_keys(imglink)
        self.date().send_keys(date)
        self.driver.get_screenshot_as_file()
        self.submit().click()
        self.driver.implicitly_wait(10)
        self.driver.get(returnurl)
        self.driver.implicitly_wait(10)
        sleep(1)
        self.driver.get_screenshot_as_file()
        sleep(2)
        self.linking(title).click()
        self.driver.get_screenshot_as_file()
        self.driver.implicitly_wait(10)
        sleep(2)

unitest测试用例代码

import unittest
from selenium import webdriver
from tasks.selenium_coconutmilk.pages.PageObjection import LoginPage, RegisterPage, ArticlePage
from tasks.selenium_coconutmilk.config.readConfig import Config
from tasks.selenium_coconutmilk.data.read_data import ReadData

config = Config()
# 测试中应使用正确的文件路径
# 可定义为path从文件读取
basedata = config.read_json(r"G:\***\basedata.json")

readdata=ReadData()
urls=readdata.read_json(r"G:\***\urls.json")
Article=readdata.read_json(r"G:\***\article.json")
Login=readdata.read_json(r"G:\***\login.json")
Register=readdata.read_json(r"G:\***\register.json")

driver=webdriver.Chrome()

class TestRegister(unittest.TestCase):

    def test_register(self):
        self.register = RegisterPage(driver, urls['registerurl'])
        self.register.register(Register['username'],Register['nickname'],Register['password'],Register['checkcode'])

class TestLogin(unittest.TestCase):
    def test_login(self):
        self.login=LoginPage(driver,urls['loginurl'])
        self.login.login(Login['username'],Login['password'])

class TestArticle(unittest.TestCase):
    def test_article(self):
        self.article=ArticlePage(driver,urls['editurl'])
        self.article.article(Article['title'],
                         Article['shortcut'],
                         Article['content'],
                         Article['source'],
                         Article['link'],
                         Article['imglink'],
                         Article['date'],
                         Article['returnurl'])


if __name__ == '__main__':
    unittest.main()