Web自动化实战(2)-- litemail电商项目

上一篇主要是搭建框架,这一篇来讲解下各个部分的逻辑。

 

Base Page:

这个类放着各个页面类通用的方法,我们先来封装下find element和sendkey

class BasePage:
    _BASE_URL = ""
    def __init__(self,base_driver=None):
        if base_driver:
            self.driver = base_driver   #如果有传递driver,则使用传递的driver来操作,这样可以保证页面的连贯性和不用每次都创建新driver来测试
        else:
            self.driver = webdriver.Chrome()
            self.driver.implicitly_wait(5)
            self.driver.maximize_window()   #如果没有传递driver则新建driver, 前置动作也可以放在这里写
        #????? why if ?
        if not self.driver.current_url.startswith("http"):
            self.driver.get(self._BASE_URL)     #这里暂时不懂

    def do_find(self,by,locator=None):      #封装find_element方法;有locator参数传入以便后续可以使用两种形式调用,一种为传入元组(By.XPATH,""),一种为直接传入By.XPATH,""

        if locator:
            return self.driver.find_element(by,locator)
        else:
            return self.driver.find_element(*by)


    def do_finds(self,by,locator=None):     #封装find_elements方法
        if locator:
            return self.driver.find_element(by, locator)
        else:
            return self.driver.find_element(*by)


    def do_send_keys(self,value,by,locator=None):   #封装send keys方法
        if locator:
            return self.driver.find_element(by,locator).send_keys(value)
        else:
            return self.driver.find_element(*by).send_keys(value)

 

LoginPage:

这个类实现登录操作,主入口也是这个。

class LoginPage(BasePage):
    _BASE_URL = "http://litemall.xxx.ceshiren.com/"    #定义打开的页面


    def login(self):
        #打开登录页面 -->init已经完成
        #清空用户名默认值,输入用户名
        self.do_find(By.NAME, "username").clear()
        self.do_send_keys("manage", By.NAME, "username")
        #清空密码默认值,输入密码
        self.do_find(By.NAME, "password").clear()
        self.do_send_keys("manage123", By.NAME, "password")
        #点击登录按钮
        self.do_find(By.CSS_SELECTOR, ".el-button--primary").click()
        #进入首页
        from page.homescreen_page import HomeScreenPage
        return HomeScreenPage(self.driver)

 

HomeScreenPage:

等登录进来后,就进入商城首页。在这个类定义一个点击跳转到商品类目的方法。

class HomeScreenPage(BasePage):
    def enter_category_page(self):
        #点击商场管理
        self.do_find(By.CSS_SELECTOR, ".el-submenu__title").click()
        #点击商品类目
        self.do_find(By.XPATH, "//*[text()='商品类目']").click()
        # sleep(2)
        #-->进入商品类目界面

        from page.item_category_page import CategoryPage
        return CategoryPage(self.driver)

 CategoryPage:

在这个类定义一个点击添加按钮创建新类目的方法和一个获取toast信息的方法以便后续做断言用。

class CategoryPage(BasePage):

    def enter_add_category(self):
        #点击添加按钮
        self.do_find(By.CSS_SELECTOR, ".el-icon-edit").click()
        #-->进入新建类目页面

        from page.add_category_page import AddCategoryPage
        return AddCategoryPage(self.driver)

    def get_result(self):
        #显示等待是否有成功创建的toast
        res = WebDriverWait(self.driver,10).until(expected_conditions.visibility_of_element_located(
            (By.XPATH,"//div[@class='el-notification__content']")))
        msg = res.text
        print(msg)
        return msg

 

AddCategoryPage:

这个类定义一个创建新类目的方法。

class AddCategoryPage(BasePage):
    def add_category(self):
        #输入类目名称
        item_name = "test_add"
        self.do_send_keys(item_name,By.CSS_SELECTOR, ".el-input__inner")
        sleep(2)
        #点击确认按钮
        self.do_find(By.XPATH, "//*[text()='确定']").click()
        sleep(2)
        #-->进入商品类目页面

        from page.item_category_page import CategoryPage
        return CategoryPage(self.driver)

 

至此,一个用例的逻辑已经全部写通。

 

下面是这个用例的方法调用流程:

posted @ 2022-06-26 13:07  lms21  阅读(158)  评论(0)    收藏  举报