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)
至此,一个用例的逻辑已经全部写通。
下面是这个用例的方法调用流程:


浙公网安备 33010602011771号