Selenium基础知识---POM设计模式

  web自动化常用的设计模式就是POM(Page Pbject Model),其设计理念是进行分层。之前我们写百度搜索测试用例时候,所有的操作都在一块,修改起来比较麻烦,并且利用率不高。

  POM的理念是,将获取元素的一些属性单独封装,每一个页面对应一个page class,每个页面都可以操作调用一些公用的元素方法类,这样后面即使需要变动,只需要看每一个page即可,其他地方不需要改动。

  以下以百度首页为例的POM组织架构:

  

   base下面封装的是定位元素,以及操作元素,如点击,输入内容,关闭浏览器,获取网页标题等一些可重复利用的常规操作

  page下面则封装的是一个个页面,比如这里封装的是搜索页面

  report下面存放的是输出的allure的报告

  testcase下面封装的是搜索测试用例

  main.py是用pytest框架运行此测试用例,并且输出测试报告。

  代码如下

  base_element.py

rom selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC



class Base:

    def __init__(self,driver):
        self.driver=driver
        self.driver.maximize_window()

    def go_page(self,url):
        self.driver.get(url)

    def find_element(self,*loc):
        return self.driver.find_element(*loc)

    def send_key(self,text,*loc):
        self.find_element(*loc).send_keys(text)

    def ele_clear(self,*loc):
        self.find_element(*loc).clear()

    def ele_click(self,*loc):
        self.find_element(*loc).click()

    def page_title(self):
        return self.driver.title

    def web_quit(self):
        self.driver.quit()

    def wait_title_content(self,title):
        WebDriverWait(self.driver,5).until(EC.title_contains(title))

  search_page.py

from selenium.webdriver.common.by import By

from pythonProject.DemoTesting.baidu.base.base_element import Base
from selenium import webdriver


class SearchPage(Base):

    page_url = 'https://www.baidu.com'
    search_input=(By.ID,'kw')
    search_btn=(By.ID,'su')

    def __init__(self):
        driver = webdriver.Chrome()
        Base.__init__(self,driver)
        self.go_page(self.page_url)

    def clear_input(self):
        self.ele_clear(*self.search_input)

    def input_text(self,text):
        self.send_key(text,*self.search_input)

    def click_btn(self):
        self.ele_click(*self.search_btn)

  test_search.py

import time
from pythonProject.DemoTesting.baidu.page.search_page import SearchPage
import allure


@allure.feature('百度首页')
class TestSearch:

    def setup_class(self):
        self.baidu_search = SearchPage()


    @allure.story('测试百度搜索框,输入为 selenium')
    @allure.description('进入百度首页,测试百度搜索框功能,输入内容为 selenium')
    @allure.title("testcase1:搜索 selenium")
    def test_case1(self):
        self.baidu_search.clear_input()
        self.baidu_search.input_text('selenium')
        self.baidu_search.click_btn()
        self.baidu_search.wait_title_content('selenium')
        assert self.baidu_search.page_title()=='selenium_百度搜索'


    @allure.story('测试百度搜索框,输入为 自动化测试')
    @allure.description('进入百度首页,测试百度搜索框功能,输入内容为 自动化测试')
    @allure.title("testcase2:搜索 自动化测试")
    def test_case2(self):
        self.baidu_search.clear_input()
        self.baidu_search.input_text('自动化测试')
        self.baidu_search.click_btn()
        self.baidu_search.wait_title_content('自动化测试')
        assert self.baidu_search.page_title() == '自动化测试_百度搜索'

    def teardown_class(self):
        time.sleep(1)
        self.baidu_search.web_quit() 

   main.py

import os

import pytest

if __name__ == '__main__':
   pytest.main(['-vs', "./testcase/test_search.py", "--alluredir", "./report/allure-result"])
   os.system(r"allure generate --clean ./report/allure-result -o ./report/allure-report")

  

 

posted @ 2021-07-29 10:48  longlongleg  阅读(578)  评论(0编辑  收藏  举报