大数跨境
0
0

简易web页面ui自动化架构学习(5)-PageLocatorst与PageObjects

简易web页面ui自动化架构学习(5)-PageLocatorst与PageObjects 橙子好甜
2025-06-18
1
导读:PageObjects设计方式的应用

上篇:简易web页面ui自动化架构学习(4)-PageObject

PageLocatorst-bid_page_locator.py

所有页面的定位元素,按页面编写,方便编写页面方法的时候复用

import syssys.path.append('..')from selenium.webdriver.common.by import Byclass BidPageLocator:    # 投资输入框    invest_input = (By.XPATH,'//input[@data-url="/Invest/invest"]')    # 投资按钮    invest_button = (By.XPATH,'//button[text()="投标"]')    # 投资成功 - 查看并激活按钮    active_button_in_successPopup = (By.XPATH,'//div[@class="layui-layer-content"]//button[text()="查看并激活"]')    # 投资失败 - 弹出框 - 提示信息    invest_failed_popup = (By.XPATH,'//div[contains(@class,"layui-layer-dialog")]//div[@class="text-center"]')    # 投资失败 - 弹出框 - 关闭弹出框    invest_close_failed_popup_button = (By.XPATH,'//div[contains(@class,"layui-layer-dialog")]//a')

这段代码定义了一个名为 BidPageLocator 的类,用于存储投标页面(Bid Page)中各种元素的定位器。这些定位器使用 Selenium 的 By 类来指定定位策略(如 XPath)。以下是代码的解析:

1. 导入模块

import syssys.path.append('..')from selenium.webdriver.common.by import By


  • sys.path.append('..')
    :将上一级目录添加到 Python 的模块搜索路径中,通常用于导入上级目录中的模块。
  • from selenium.webdriver.common.by import By
    :导入 Selenium 的 By 类,用于指定元素定位策略(如 By.XPATHBy.ID 等)。

2. BidPageLocator 类

class BidPageLocator:

   这是一个包含投标页面元素定位器的类,所有属性都是静态的(无需实例化即可使用)。

3. 元素定位器

   以下是类中定义的元素定位器,均使用 By.XPATH 策略:

  • 投资输入框
invest_input = (By.XPATH, '//input[@data-url="/Invest/invest"]')

通过 input 标签的 data-url 属性定位投资金额输入框。

  • 投资按钮
invest_button = (By.XPATH, '//button[text()="投标"]')

通过按钮的文本内容 "投标" 定位投资按钮。

  • 投资成功弹窗的“查看并激活”按钮
invest_input = (By.XPATH, '//input[@data-url="/Invest/invest"]')

定位投资成功后弹窗中的“查看并激活”按钮。  

    • 先找到 class="layui-layer-content" 的 div,再在其子元素中找到文本为 "查看并激活" 的 button
  • 投资失败弹窗的提示信息
invest_button = (By.XPATH, '//button[text()="投标"]')

定位投资失败弹窗中的提示信息。  

    • 找到 class 包含 "layui-layer-dialog" 的 div,再在其子元素中找到 class="text-center" 的 div
  • 投资失败弹窗的关闭按钮
active_button_in_successPopup = (By.XPATH, '//div[@class="layui-layer-content"]//button[text()="查看并激活"]')

定位投资失败弹窗的关闭按钮(通常是一个 a 标签)。  

    • 找到 class 包含 "layui-layer-dialog" 的 div,再在其子元素中找到 a 标签。

4. 用途

  • 这些定位器用于在 Selenium 自动化测试中定位投标页面的关键元素,例如输入投资金额、点击投标按钮、处理成功或失败的弹窗等。
  • 通过将定位器集中管理,可以提高代码的可维护性(如需修改定位方式,只需调整此处)。

这段代码是一个典型的 Page Object Model (POM) 设计模式的实现,将页面元素的定位信息集中管理,便于维护和复用。




PageObjects-bid_page.py

根据页面编写操作函数,方便后续用例调用的时候复用。

import syssys.path.append("..")from PageLocators.bid_page_locator import BidPageLocator as locfrom Common.BasePage import BasePageclass BidPage(BasePage):
    #获取用户余额    def get_user_leftMoney(self):        name = "标页面_获取用户余额"        #等待        self.wait_eleVisible(loc.invest_input,model=name)        # 获取金额输入框的data-amount属性值;        return self.get_element_attribute(loc.invest_input,"data-amount",model=name)
    #投资操作    def invest(self,money):        name = "标页面_投资操作"        #输入框,输入值        self.wait_eleVisible(loc.invest_input,model=name)        self.input_text(loc.invest_input,money,model=name)        # 点击按钮        self.click_element(loc.invest_button,model=name)
    #投资成功 - 弹出框 - 点击激活并查看按钮    def click_activeButton_from_investSuccess_popup(self):        name = "标页面_投资成功弹出框_点击查看并激动按钮"        self.wait_eleVisible(loc.active_button_in_successPopup,model=name)        self.click_element(loc.active_button_in_successPopup,model=name)
    #投资失败 - 2种场景
    # 投资失败的弹出框 - 获取信息    def get_errorMsg_from_popup(self):        name = "投资失败弹出框_提示信息"        self.wait_eleVisible(loc.invest_failed_popup, model=name)        msg = self.get_text(loc.invest_failed_popup, model=name)        # 关闭弹出框        self.click_element(loc.invest_close_failed_popup_button, model=name)        return msg

这段代码定义了一个 BidPage 类,继承自 BasePage,用于封装投标页面(Bid Page)的操作逻辑。它结合了 BidPageLocator(页面元素定位器)和 BasePage(基础页面操作类)来实现投标页面的功能。以下是详细解析:


1. 导入模块

import syssys.path.append("..")from PageLocators.bid_page_locator import BidPageLocator as locfrom Common.BasePage import BasePage
  • sys.path.append("..")
    :将上级目录添加到 Python 的模块搜索路径,以便导入其他目录的模块。
  • BidPageLocator
    :导入页面元素定位器类,并重命名为 loc,简化后续调用。
  • BasePage
    :导入基础页面类,BidPage 继承它,复用其封装的方法(如输入文本、点击元素等)。

2. BidPage 类

继承 BasePage,封装投标页面的具体操作:

(1) 获取用户余额

def get_user_leftMoney(self):    name = "标页面_获取用户余额"    self.wait_eleVisible(loc.invest_input, model=name)    return self.get_element_attribute(loc.invest_input, "data-amount", model=name)
  • 功能
    :获取投资输入框中 data-amount 属性的值(用户可用余额)。
  • 步骤
    1. 等待投资输入框可见(wait_eleVisible)。
    2. 获取输入框的 data-amount 属性值(get_element_attribute)。
  • 参数说明
    • model=name
      :用于日志记录,标识当前操作所属模块。

(2) 投资操作

def invest(self, money):    name = "标页面_投资操作"    self.wait_eleVisible(loc.invest_input, model=name)    self.input_text(loc.invest_input, money, model=name)    self.click_element(loc.invest_button, model=name)
  • 功能
    :输入投资金额并点击投标按钮。
  • 步骤
    1. 等待投资输入框可见。
    2. 在输入框中输入金额(input_text)。
    3. 点击投标按钮(click_element)。

(3) 处理投资成功弹窗

def click_activeButton_from_investSuccess_popup(self):    name = "标页面_投资成功弹出框_点击查看并激动按钮"    self.wait_eleVisible(loc.active_button_in_successPopup, model=name)    self.click_element(loc.active_button_in_successPopup, model=name)
  • 功能
    :点击投资成功弹窗中的“查看并激活”按钮。
  • 步骤
    1. 等待按钮可见。
    2. 点击按钮。

(4) 处理投资失败弹窗

def get_errorMsg_from_popup(self):    name = "投资失败弹出框_提示信息"    self.wait_eleVisible(loc.invest_failed_popup, model=name)    msg = self.get_text(loc.invest_failed_popup, model=name)    self.click_element(loc.invest_close_failed_popup_button, model=name)    return msg
  • 功能
    :获取投资失败弹窗的提示信息,并关闭弹窗。
  • 步骤
    1. 等待失败提示弹窗可见。
    2. 获取弹窗文本内容(get_text)。
    3. 关闭弹窗(点击关闭按钮)。
    4. 返回错误消息。

3. 关键设计思想

  1. Page Object Model (POM)
    • 页面元素定位(BidPageLocator)与操作逻辑(BidPage)分离,提高代码可维护性。
    • 元素定位变更只需修改 BidPageLocator,不影响测试脚本。
  1. 继承 BasePage
    • 复用基础方法(如 input_textclick_element),避免重复代码。
    • 统一处理等待、日志等通用逻辑。
  1. 显式等待
    • 所有操作前均通过 wait_eleVisible 确保元素可交互,增强脚本稳定性。
  1. 错误处理
    • 投资失败场景通过弹窗提示和关闭操作封装,简化调用方代码。

4. 示例调用

# 假设在测试脚本中调用driver = webdriver.Chrome()bid_page = BidPage(driver)
# 获取用户余额balance = bid_page.get_user_leftMoney()print(f"当前余额: {balance}")
# 投资操作bid_page.invest("100")
# 处理成功弹窗bid_page.click_activeButton_from_investSuccess_popup()
# 处理失败弹窗(如金额不足)error_msg = bid_page.get_errorMsg_from_popup()print(f"错误信息: {error_msg}")

5. 总结

  • 优点
    • 代码结构清晰,符合 POM 设计模式。
    • 操作与定位分离,易于维护。
    • 显式等待和日志记录提升脚本健壮性。
  • 适用场景
    :Web 自动化测试中的投标页面功能测试。

【声明】内容源于网络
0
0
橙子好甜
人生苦短,我用python --it测试狗
内容 30
粉丝 0
橙子好甜 人生苦短,我用python --it测试狗
总阅读95
粉丝0
内容30