123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- '''
- @File : list_page.py
- @Time : 2024/11/20 17:04:10
- @Author : dulip3ng
- @Version : 1.0
- @Desc : None
- '''
- from pages.base_page import BasePage
- from playwright.sync_api import Page, expect
- class ListPage(BasePage):
- """
- 列表页面模型,适用于普通单据列表页面,如销售订单列表
- """
- def __init__(self, page:Page, locator):
- super().__init__(page)
- self.locator = locator
-
- def wait_list_loaded(self):
- """
- 等待页面加载完成,当页面加载出第一行第一列表格时,停止等待
- **用法:**
- ListPage.wait_list_loaded()
- **注意:**
- 1.有时表格加载完成但界面仍存在wait_loading转圈图标,不做处理由playwright自动处理后续元素可操作性检查
- 2.默认等待时间受 expect.set_options(timeout=)全局控制
- 3.此方法只能检测有数据的列表是否加载完成,因为无数据时不会出现td表格元素,无法区分是否加载完成
- :return:
- """
- expect(self.page.locator(self.locator.WAITING_LOC).first).to_be_enabled()
- self.wait_time(1000)
- def click_button(self, button_name: str, sub_button:str=None, grandson_button:str=None, wait_load=False):
- """
- 点击列表按钮,如“新增”
- **用法:**
- ListPage.click_button("新增")
- ListPage.click_button("新增", "复制")
- ListPage.click_button("选项", "套打", "套打设置")
- :param button_name: 按钮名称
- :param sub_button: 子按钮名称,如”复制“
- :param grandson_button: 三级按钮名称,如”选项>套打>套打设置“
- :return:
- """
- if wait_load:
- self.wait_list_loaded()
- if sub_button is None and grandson_button is None:
- self.page.locator(self.locator.BUTTON_ARGS_LOC % (button_name, 1)).click()
- if sub_button and grandson_button is None:
- self.page.locator(self.locator.BUTTON_ARGS_LOC % (button_name, 1)).hover()
- self.page.locator(self.locator.SUB_BUTTON_ARGS_LOC % sub_button).click()
- if sub_button and grandson_button:
- self.page.locator(self.locator.BUTTON_ARGS_LOC % (button_name, 1)).hover()
- self.page.locator(self.locator.SUB_BUTTON_ARGS_LOC % sub_button).hover()
- self.page.locator(self.locator.GRANDSON_BUTTON_ARGS_LOC % (sub_button, grandson_button)).click()
- def check_line_by_rows(self, *rows: int):
- """
- 勾选给定行号
- **用法:**
- ListPage.check_line_by_rows(1)
- ListPage.check_line_by_rows(1,2,3)
- :param rows: 行号,可传多个
- :return:
- """
- self.wait_list_loaded()
- if rows == ():
- self.page.locator(self.locator.ROW_DATA_ARGS_LOC % 1).click()
- self.page.locator(self.locator.ROW_DATA_ALL_LOC).click()
- for r in rows:
- self.page.locator(self.locator.ROW_DATA_ARGS_LOC % r).click()
- def open_bill_by_row(self, row: int):
- """
- 根据行号打开单据
- **用法:**
- ListPage.open_bill_by_row(1)
- **注意:**
- 此方法是通过点击行号的单据编号字段打开单据,确保该行单据编号字段有值
- :param row: 行号
- :return:
- """
- self.wait_list_loaded()
- self.page.locator(self.locator.BILL_NO_FIELD_ARGS_LOC % row).click()
- def get_value(self, row: int, field_name:str):
- """
- 获取列表字段值
- **用法:**
- ListPage.get_value("衬衣订单号", 1)
- **注意:**
- 单据编号字段无效,可用get_bill_no()
- :param field_name: 字段名
- :param row: 行号
- :return: 字段值
- """
- self.wait_list_loaded()
- return self.page.locator(self.locator.ROW_FIELD_VALUE_ARGS_LOC % (field_name, row)).inner_text()
- def get_bill_no(self, row: int):
- """
- 根据行号获取单据编号字段值
- **用法:**
- ListPage.get_bill_no(1)
- **注意:**
- 确保给定行号单据编号字段有值
- :param row: 行号
- :return:
- """
- self.wait_list_loaded()
- return self.page.locator(self.locator.BILL_NO_FIELD_VALUE_ARGS_LOC % row).inner_text()
- def get_row_count(self):
- """
- 获取列表总行数
- **用法:**
- ListPage.get_row_count()
- :return: 列表行数
- """
- self.wait_list_loaded()
- return self.page.locator(self.locator.LIST_ALL_LINE_LOC).count()
- def check_line_by_field_value(self, field_name:str, value:str):
- """
- 根据给定字段名,字段值勾选对应行
- **用法:**
- ListPage.check_line_by_field_value("衬衣订单号", "26022021")
- **注意:**
- 当列表中存在多个相同字段值行时,只勾选第一行
- :param field_name: 字段名
- :param value: 字段值
- :return:
- """
- self.wait_list_loaded()
- row = self.page.locator(self.locator.FIELDS_VALUE_ARGS_LOC % (field_name, value)).first.get_attribute('data-rowid')
- self.check_line_by_rows(int(row))
- def field_filter(self, field_name:str, value:str):
- """
- 字段过滤,点击列表列名右侧小漏斗,进行列表简单过滤
- **用法:**
- ListPage.field_filter("销售类别", "内销")
- :param field_name: 字段名
- :param value: 过滤值
- :return:
- """
- self.wait_list_loaded()
- self.page.locator(self.locator.FIELD_FILTER_ARGS_LOC % field_name).hover()
- self.page.locator(self.locator.FILTER_ICON_ARGS_LOC % field_name).click()
- self.page.locator(self.locator.FILTER_VALUE_ARGS_LOC % value).click()
- self.page.locator(self.locator.FILTER_OK_BTN).click()
|