1、业务流程
登录→搜索商品→选择商品并添加购物车→购物车结算,提交订单→我的订单校对信息
2、问题汇总
2-1 模糊搜索商品,元素定位用以下方法
prod = (By.XPATH, f'//div[contains(text(), "{prod_name}")]')
2-2 商品价格前后带空白字符和¥符号
def get_prod_price(self, driver, prod_name):
locator = (By.XPATH, f'//a[contains(text(),"{prod_name}")]/parent::div/following-sibling::div[3]')
# 获取价格文本信息
text = self.get_text(driver, locator)
# 去掉它的前后空白字符(空格+换行符)以及¥符号
return text.strip()[1:]
2-3 购物车页面,商品的数量不可见,通过属性获取元素的显示值
def get_prod_num(self, driver, prod_name):
locator = (By.XPATH, f'//a[contains(text(),"{prod_name}")]/parent::div/following-sibling::div[2]//input')
# 获取它的value属性拿到元素显示的值
return self.get_attribute(driver, locator, 'value')
2-4 如果我的订单和购物车页面价格不一致,可以选择提交订单页面的价格作为期望值,要注意的是先进入提交订单页面,再定位价格元素
# 订单提交页面
prod_price = SubmitOrderPage().get_pay_price(driver)
# 先进入到订单界面再获取价格,否则会找不到元素报超时错误
SubmitOrderPage().click_submit_button(driver)
2-5 商品数量的预期值/实际值显示None,检查方法是否有返回值
# 我的订单页面
def get_prod_num(self, driver):
# 返回商品数量
return self.get_text(driver, self.prod_num)[1:]
# 购物车页面
def get_prod_num(self, driver, prod_name):
locator = (By.XPATH, f'//a[contains(text(),"{prod_name}")]/parent::div/following-sibling::div[2]//input')
# 返回商品数量
return self.get_attribute(driver, locator, 'value')