Commit 05cafa5e authored by 齐 振鋆's avatar 齐 振鋆
Browse files

手术请领单维护

parent fc81126b
dbinfo: dbinfo:
'DB_HOST': '10.17.65.215' 'DB_HOST': '10.17.65.215'
'DB_PORT': 3306 'DB_PORT': 3306
'DB_USER': 'aws' 'DB_USER': 'sctest'
'DB_PASSWD': 'admins' 'DB_PASSWD': 'Cmic2022@'
'DB_NAME': 'aws' 'DB_NAME': 'awsuat'
userinfo: # 登录用户信息 userinfo: # 登录用户信息
username: 'qizhenjun' username: 'bj_01'
password: 'Gyxc1234' password: 'Gyxc1234'
verificationCode: 0 # 验证码识别:1开启|0关闭 verificationCode: 0 # 验证码识别:1开启|0关闭
minNum: 2 minNum: 2
\ No newline at end of file
...@@ -2,13 +2,13 @@ ...@@ -2,13 +2,13 @@
# 作者:齐振鋆 # 作者:齐振鋆
# 日期:2023/2/15 # 日期:2023/2/15
# 描述: # 描述:
import os
import pytest
import allure
import logging import logging
import os
from datetime import datetime
import allure
import pytest
from ddt import ddt, file_data from ddt import ddt, file_data
from datetime import datetime
from cases.UI.GuKeYiTiHua import PROJECTNAME from cases.UI.GuKeYiTiHua import PROJECTNAME
from component.GuKeYiTiHua.StorageManage.StorageIn.warehouse_accept import WarehouseVerify from component.GuKeYiTiHua.StorageManage.StorageIn.warehouse_accept import WarehouseVerify
...@@ -25,7 +25,6 @@ from component.GuKeYiTiHua.SurgeryFollow.SurgeryLend.orthopedic_lend import Orth ...@@ -25,7 +25,6 @@ from component.GuKeYiTiHua.SurgeryFollow.SurgeryLend.orthopedic_lend import Orth
from component.GuKeYiTiHua.SurgeryFollow.SurgeryLend.out_ledger import OutLedger from component.GuKeYiTiHua.SurgeryFollow.SurgeryLend.out_ledger import OutLedger
from component.GuKeYiTiHua.SurgeryFollow.SurgeryLend.surgery_distribute import SurgeryDistribute from component.GuKeYiTiHua.SurgeryFollow.SurgeryLend.surgery_distribute import SurgeryDistribute
from component.GuKeYiTiHua.SurgeryFollow.SurgeryLend.surgery_require import SurgeryRequire from component.GuKeYiTiHua.SurgeryFollow.SurgeryLend.surgery_require import SurgeryRequire
from page.GuKeYiTiHua.DBQuery.db_query import DBQuery from page.GuKeYiTiHua.DBQuery.db_query import DBQuery
from page.GuKeYiTiHua.Public.common import CommonElement from page.GuKeYiTiHua.Public.common import CommonElement
from unit.public.DataDic import DataDic from unit.public.DataDic import DataDic
...@@ -67,8 +66,8 @@ class TestSurgeryFollow(object): ...@@ -67,8 +66,8 @@ class TestSurgeryFollow(object):
@allure.description('测试时间:{}'.format(datetime.now())) @allure.description('测试时间:{}'.format(datetime.now()))
@pytest.mark.surgery @pytest.mark.surgery
@pytest.mark.run(order=10) @pytest.mark.run(order=10)
# @file_data('{}/data/{}TestData.yaml'.format(os.getcwd(), dd.get_value('module'))) @file_data('{}/data/{}TestData.yaml'.format(os.getcwd(), dd.get_value('module')))
@file_data(dd.get_value('test_data_file')) # @file_data(dd.get_value('test_data_file'))
def test_surgery_normal(self, **kwargs): def test_surgery_normal(self, **kwargs):
with allure.step('测试数据准备...'): with allure.step('测试数据准备...'):
log.info(kwargs) log.info(kwargs)
...@@ -91,7 +90,7 @@ class TestSurgeryFollow(object): ...@@ -91,7 +90,7 @@ class TestSurgeryFollow(object):
self.sd.surgery_distribute_search(tap_name='已办', order_code=ql_code) self.sd.surgery_distribute_search(tap_name='已办', order_code=ql_code)
self.common.close_tap() self.common.close_tap()
with allure.step('骨科仓借出单'): with allure.step('手术借出单'):
self.ol.orthopedic_lend_menu_open() self.ol.orthopedic_lend_menu_open()
if process_type == 1: if process_type == 1:
self.ol.orthopedic_lend_search(ot='QL', order_code=ql_code) self.ol.orthopedic_lend_search(ot='QL', order_code=ql_code)
......
...@@ -7,7 +7,6 @@ import os ...@@ -7,7 +7,6 @@ import os
import pytest import pytest
from selenium import webdriver from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from unit.public.DBUnit import MysqlDataBase from unit.public.DBUnit import MysqlDataBase
from unit.public.DataDic import DataDic from unit.public.DataDic import DataDic
...@@ -36,13 +35,19 @@ def init_browser(pytestconfig): ...@@ -36,13 +35,19 @@ def init_browser(pytestconfig):
# chrome_options.add_argument('--disable-gpu') # 禁用GPU加速 # chrome_options.add_argument('--disable-gpu') # 禁用GPU加速
# chrome_options.add_argument('–disable-software-rasterizer') # chrome_options.add_argument('–disable-software-rasterizer')
# chrome_options.add_argument('--disable-extensions') # chrome_options.add_argument('--disable-extensions')
# driver = webdriver.Chrome(executable_path=os.path.join(dd.get_value('root_path'), 'driver', 'chromedriver.exe')) if test_host == 'localhost' else webdriver.Remote(command_executor='http://{}:5555/wd/hub'.format(test_host), options=chrome_options) driver = webdriver.Chrome(
driver = webdriver.Chrome(ChromeDriverManager().install())if client == 'localhost' else webdriver.Remote(command_executor='http://{}:5555/wd/hub'.format(client), options=chrome_options) executable_path=os.path.join(dd.get_value('root_path'), 'driver',
'chromedriver.exe')) if client == 'localhost' else webdriver.Remote(
command_executor='http://{}:5555/wd/hub'.format(client), options=chrome_options)
# driver = webdriver.Chrome(
# ChromeDriverManager(path=r'.\\driver').install()) if client == 'localhost' else webdriver.Remote(
# command_executor='http://{}:5555/wd/hub'.format(client), options=chrome_options)
dd.set_value('driver', driver) dd.set_value('driver', driver)
driver.maximize_window() driver.maximize_window()
log.info('读取项目配置文件......') log.info('读取项目配置文件......')
project_conf_path = os.path.join(dd.get_value('root_path'), 'cases', 'UI', dd.get_value('project'), 'envConfig.yaml') project_conf_path = os.path.join(dd.get_value('root_path'), 'cases', 'UI', dd.get_value('project'),
'envConfig.yaml')
project_conf = UtilYaml(project_conf_path).load_yaml() project_conf = UtilYaml(project_conf_path).load_yaml()
dd.set_value('project_conf', project_conf) dd.set_value('project_conf', project_conf)
dd.set_value('minNum', project_conf['minNum']) dd.set_value('minNum', project_conf['minNum'])
......
...@@ -45,45 +45,55 @@ class SurgeryRequire(object): ...@@ -45,45 +45,55 @@ class SurgeryRequire(object):
self.iframe.to_main_iframe() self.iframe.to_main_iframe()
if order_code is None: if order_code is None:
self.button.new() self.button.new()
log.info('获取请领单号&存储')
ql_code = ''
while ql_code.startswith('QL') is False:
sleep(1)
ql_code = self.order_detail_main.get_element_text('请领单号 ')
log.info('请领单号:【{}】'.format(ql_code))
else: else:
self.surgery_require_search(order_code=order_code) self.surgery_require_search(order_code=order_code)
self.list_page.open_order(order_code=order_code) self.list_page.open_order(order_code=order_code)
ql_code = order_code
self.order_detail_main.choose_tap('主体信息') self.menu.dd.set_value('ql_code', ql_code)
UtilYaml(self.menu.dd.get_value('extract_path')).write_yaml({'ql_code': ql_code})
# self.order_detail_main.choose_tap('主体信息') 已作废
# 公司 # 公司
self.order_detail_main.some_click_item('公司名称 ') # self.order_detail_main.some_click_item('公司名称 ')
company_code = test_data_info['company'] # company_code = test_data_info['company']
self.modal.search_and_choose_items(placeholder='模糊检索:公司名称,公司编码', text=company_code) # self.modal.search_and_choose_items(placeholder='模糊检索:公司名称,公司编码', text=company_code)
self.order_detail_main.drop_choose_item('手术类型 ', '翻修手术')
# 手术日期
date_str = self.menu.tu.get_date_str(1)
self.order_detail_main.date_input_item('手术日期 ', date_str)
self.order_detail_main.choose_tap('客户信息')
self.order_detail_main.some_click_item('客户名称 ') self.order_detail_main.some_click_item('客户名称 ')
customer_code = test_data_info['customer'] customer_code = test_data_info['customer']
self.modal.search_and_choose_items(title='选择客户', text=customer_code) self.modal.search_and_choose_items(title='选择客户', text=customer_code)
self.order_detail_main.some_click_item('配销客户名称 ') self.order_detail_main.some_click_item('配销客户名称 ')
self.modal.search_and_choose_items(title='选择配销客户', text=customer_code) self.modal.search_and_choose_items(title='选择配销客户', text=customer_code)
# self.order_detail_main.choose_tap('其他信息') # 手术类型
self.order_detail_main.drop_choose_item('手术类型 ', '翻修髋')
# 手术日期
date_str = self.menu.tu.get_date_str(1)
self.order_detail_main.date_input_item('手术日期 ', date_str)
# 手术医生
self.order_detail_main.text_input_item('手术医生 ', '齐振鋆')
# 手术种类
self.order_detail_main.drop_choose_item('手术种类 ', '髋关节')
# self.order_detail_main.choose_tap('客户信息') 已作废
# self.order_detail_main.choose_tap('其他信息') 已作废
# self.order_detail_main.some_click_item(name='是否启用开单校验 ', end_str="div[@class='awsui-component']") # self.order_detail_main.some_click_item(name='是否启用开单校验 ', end_str="div[@class='awsui-component']")
# 保存获得请领单号 # 保存获得请领单号
self.order_detail_main.choose_tap('主体信息') # self.order_detail_main.choose_tap('主体信息') 已作废
self.button.save() # self.button.save()
log.info('获取请领单号&存储')
ql_code = ''
while ql_code.startswith('QL') is False:
sleep(1)
ql_code = self.order_detail_main.get_element_text('请领单号 ')
log.info('请领单号:【{}】'.format(ql_code))
self.menu.dd.set_value('ql_code', ql_code)
UtilYaml(self.menu.dd.get_value('extract_path')).write_yaml({'ql_code': ql_code})
log.info('添加商品') log.info('添加商品')
self.button.click_button(button_name='商品信息') self.button.click_button(button_name='添加商品(内部)')
goods = test_data_info['goods'] goods = test_data_info['goods']
self.modal.search_and_choose_items(placeholder='模糊检索:商品编码,商品名称,规格型号,厂家物料编码,存储条件', text=goods) self.modal.search_and_choose_items(placeholder='模糊检索:商品编码,商品名称,规格型号,厂家物料编码,存储条件',
text=goods)
sleep(3 * len(goods)) sleep(3 * len(goods))
self.order_detail_table.get_cell_text('商品名称', goods[0]) self.order_detail_table.get_cell_text('商品名称', goods[0])
min_num = self.menu.dd.get_value('minNum') min_num = self.menu.dd.get_value('minNum')
......
- - description: 'normal sense' # 场景说明
description: 'normal sense' # 场景说明 process_type: 1 # 1:请领单开始,2:借出单开始
process_type: 2 # 1:请领单开始,2:借出单开始 company: '00103' # 公司
company: '00122' # 公司 warehouse_lend: '103303' # 借出仓
warehouse_lend: '122302' # 借出仓 warehouse_borrow: '103503' # 借入仓
warehouse_borrow: '122310' # 借入仓 warehouse_return: '103303' # 还回仓
warehouse_return: '122302' # 还回仓 salesman: '11353403' # 业务员
salesman: '12345678' # 业务员 customer: '1000486' # 客户
customer: '1219166' # 客户 agreement: '38618' # 合同
agreement: '38618' # 合同 follow: 'N' # 是否连台
follow: 'N' # 是否连台 goods: # 借出商品
goods: # 借出商品 - '10154043'
# - 非序列号商品:10174665、10154871、10153570、10155572、10156326、10156327、10156331、10157133 - '10006180'
# - 序列号商品:10171873、10184703、10154042、10157849、10157852、10155177
# - '10157133'
# - '10045736'
# - '10184703'
# - '10157852'
- '10155177'
...@@ -2,4 +2,6 @@ Edge: ...@@ -2,4 +2,6 @@ Edge:
https://developer.microsoft.com/zh-cn/microsoft-edge/tools/webdriver/ https://developer.microsoft.com/zh-cn/microsoft-edge/tools/webdriver/
Chrome: Chrome:
https://registry.npmmirror.com/binary.html?path=chromedriver/ https://registry.npmmirror.com/binary.html?path=chromedriver/
\ No newline at end of file https://chromedriver.storage.googleapis.com/index.html
http://npm.taobao.org/mirrors/chromedriver/
\ No newline at end of file
...@@ -19,8 +19,13 @@ def get_results(index, col): ...@@ -19,8 +19,13 @@ def get_results(index, col):
sql = func(self, *args, **kwargs) sql = func(self, *args, **kwargs)
log.info(sql) log.info(sql)
result = db.exec(sql) result = db.exec(sql)
return result if index is None else result[index] if col is None else result[index][col] try:
return result if index is None else result[index] if col is None else result[index][col]
except IndexError:
return "IndexError"
return wrapper return wrapper
return query return query
......
...@@ -2,6 +2,9 @@ ...@@ -2,6 +2,9 @@
# 作者:齐振鋆 # 作者:齐振鋆
# 日期:2022/9/23 # 日期:2022/9/23
import logging import logging
import time
from selenium.webdriver.common.by import By
from unit.public.UI.BasePage import BasePage from unit.public.UI.BasePage import BasePage
...@@ -11,12 +14,17 @@ log = logging.getLogger(__name__) ...@@ -11,12 +14,17 @@ log = logging.getLogger(__name__)
class MenuElement(BasePage): class MenuElement(BasePage):
def open_menu(self, first_menu_name, last_menu_name): def open_menu(self, first_menu_name, last_menu_name):
log.info('打开菜单:{}'.format(last_menu_name)) log.info('打开菜单:{}'.format(last_menu_name))
first_menu = "//div[contains(@class,'menuNavTop')]//div[text()='{}']".format(first_menu_name) # first_menu = "//div[contains(@class,'menuNavTop')]//div[text()='{}']".format(first_menu_name)
second_menu = "//div[contains(@class, 'third-menu') and @navname='{}']/ancestor::div[@class='sec-menu']".format( # second_menu = "//div[contains(@class, 'third-menu') and @navname='{}']/ancestor::div[@class='sec-menu']".format(
last_menu_name) # last_menu_name)
third_menu = "//div[contains(@class, 'third-menu') and @navname='{}']".format(last_menu_name) # third_menu = "//div[contains(@class, 'third-menu') and @navname='{}']".format(last_menu_name)
menu = f"//div[contains(@class, 'menu') and @navname='{last_menu_name}']/span"
# self.move_to_element(first_menu) # self.move_to_element(first_menu)
# self.move_to_element(second_menu) # self.move_to_element(second_menu)
# self.click(third_menu) if self.wait_element(third_menu) else self.click(second_menu) # self.click(third_menu) if self.wait_element(third_menu) else self.click(second_menu)
self.js("arguments[0].click();", self.get_element(third_menu)) if self.wait_element(third_menu) else self.js(
"arguments[0].click();", self.get_element(second_menu)) driver = self.dd.get_value('driver')
em = driver.find_element(By.XPATH, menu)
time.sleep(3)
driver.execute_script("arguments[0].click();", em)
# self.js("arguments[0].click();", menu)
...@@ -4,7 +4,7 @@ python_classes = Test* ...@@ -4,7 +4,7 @@ python_classes = Test*
python_functions = test python_functions = test
log_cli = 1 log_cli = 1
log_cli_level = INFO log_cli_level = DEBUG
log_cli_format = %(asctime)s [%(levelname)s] %(message)s (%(filename)s:%(lineno)s) log_cli_format = %(asctime)s [%(levelname)s] %(message)s (%(filename)s:%(lineno)s)
log_cli_date_format=%Y-%m-%d %H:%M:%S log_cli_date_format=%Y-%m-%d %H:%M:%S
......
...@@ -2,38 +2,23 @@ ...@@ -2,38 +2,23 @@
import argparse import argparse
import os import os
import flet
import pytest import pytest
from flet import ResponsiveRow, Column, ElevatedButton, Text, TextField, Dropdown, icons, FilePickerResultEvent, \
FilePicker, alignment, Container, dropdown, KeyboardType
from flet import Ref
from unit.public.DataDic import DataDic from unit.public.DataDic import DataDic
dd = DataDic() dd = DataDic()
def py_run(): def py_run():
tab_code = dd.get_value('tab')
if tab_code is None:
pytest.main(['cases/UI/{}/{}'.format(dd.get_value('project'), dd.get_value('module'))])
else:
pytest.main(
['cases/UI/{}/{}'.format(dd.get_value('project'), dd.get_value('module')), '-m', tab_code])
# allure generate allure-results -o allure-report --clean
os.system("allure generate allure-results -o allure-report --clean")
def get_command_args():
"""命令行参数解析""" """命令行参数解析"""
parser = argparse.ArgumentParser(description=u'可选择参数:') parser = argparse.ArgumentParser(description=u'可选择参数:')
parser.add_argument("--client", default='localhost', help="client:客户端IP") parser.add_argument("--client", default='localhost', help="client:客户端IP")
parser.add_argument("--project", default='GuKeYiTiHua', help="project:项目") parser.add_argument("--project", default='GuKeYiTiHua', help="project:项目")
# url: 'http://10.17.65.216:8088/portal/' 'http://10.17.65.200:8088/portal/' # url: 'http://scdev.cmic.com.cn:8088/beta/r/w'
parser.add_argument("--url", default='http://10.17.65.216:8088/portal/', help="url: 地址") parser.add_argument("--url", default='http://scdev.cmic.com.cn:8088/beta/r/w', help="url: 地址")
# ;手术跟台: surgery | 采购管理:purchase | 调拨管理: Transfer | 库存管理:inventory | 调试:debug # ;手术跟台: surgery | 采购管理:purchase | 调拨管理: Transfer | 库存管理:inventory | 调试:debug
parser.add_argument("--module", default='purchase', help="module:模块") parser.add_argument("--module", default='surgery', help="module:模块")
parser.add_argument("--tab", default='purchase', help="tab:标记") parser.add_argument("--tab", default='surgery', help="tab:标记")
parser.add_argument("--order", help="order: 单据编码") parser.add_argument("--order", help="order: 单据编码")
parser.add_argument("--co", help="co: 公司") parser.add_argument("--co", help="co: 公司")
parser.add_argument("--wh", help="wh: 仓库") parser.add_argument("--wh", help="wh: 仓库")
...@@ -50,110 +35,16 @@ def get_command_args(): ...@@ -50,110 +35,16 @@ def get_command_args():
dd.set_value('warehouse', args.wh) dd.set_value('warehouse', args.wh)
dd.set_value('custGood', args.good) dd.set_value('custGood', args.good)
dd.set_value('custNum', args.num) dd.set_value('custNum', args.num)
py_run()
def get_ui_args(page):
page.title = "国药自动化测试启动器"
client_ip = Ref[TextField]()
test_url = Ref[TextField]()
project_name = Ref[Dropdown]()
module_name = Ref[Dropdown]()
tab_name = Ref[Dropdown]()
test_file = Ref[TextField]()
greetings = Ref[Column]()
def run(e):
greetings.current.controls.append(
Text(f"【测试环境】:{test_url.current.value}")
)
greetings.current.controls.append(
Text(f"【项目】:{project_name.current.value}-【模块】:{module_name.current.value}-【标签】:{tab_name.current.value}")
)
page.update()
dd.set_value('client', client_ip.current.value)
p_name = project_name.current.value
p_code = 'GuKeYiTiHua' if p_name == '骨科一体化' else 'TestProject'
dd.set_value('project', p_code)
dd.set_value('url', test_url.current.value)
m_name = module_name.current.value
m_code = 'purchase' if m_name == '采购管理' \
else 'surgery' if m_name == '手术跟台' \
else 'transfer' if m_name == '调拨管理' \
else None
dd.set_value('module', m_code)
t_name = tab_name.current.value tab_code = dd.get_value('tab')
t_code = 'all' if t_name == '全量' else 'smoking' if t_name == '冒烟' else 'debug' if t_name == '调试' else None if tab_code is None:
dd.set_value('tab', t_code) pytest.main(['cases/UI/{}/{}'.format(dd.get_value('project'), dd.get_value('module'))])
py_run() else:
pytest.main(
def stop(e): ['cases/UI/{}/{}'.format(dd.get_value('project'), dd.get_value('module')), '-m', tab_code])
dd.get_value('driver').close() # allure generate allure-results -o allure-report --clean
dd.get_value('driver').quit() os.system("allure generate allure-results -o allure-report --clean")
def module_update(e):
m_options = []
module_list = ['采购管理', '手术跟台', '调拨管理'] if project_name.current.value == '骨科一体化' \
else ['模块1', '模块2', '模块3'] if project_name.current.value == '测试项目' \
else []
for m_item in module_list:
m_options.append(dropdown.Option(m_item))
module.options = m_options
page.update()
def pick_files_result(e: FilePickerResultEvent):
selected_files.value = (
e.files[0].path if e.files else "Cancelled!"
)
selected_files.update()
test_data_file = test_file.current.value
dd.set_value('test_data_file', test_data_file)
client = TextField(ref=client_ip, label="客户端地址", icon=icons.BOY, autofocus=True, value='localhost',
read_only=True, )
url = TextField(ref=test_url, label="测试环境", icon=icons.HTTP, keyboard_type=KeyboardType.URL, value='http://10.17.65.216:8088/portal/r/w')
project_options = []
for item in ['骨科一体化', '测试项目']:
project_options.append(dropdown.Option(item))
project = Dropdown(ref=project_name, label="项目名称", icon=icons.HOUSE, options=project_options,
on_change=module_update)
module_options = []
module = Dropdown(ref=module_name, label="模块名称", icon=icons.MOOD, options=module_options)
tab_options = []
for item in ['全量', '冒烟', '调试']:
tab_options.append(dropdown.Option(item))
tab = Dropdown(ref=tab_name, label="标签名称", icon=icons.TAB, options=tab_options)
file = ElevatedButton(
"测试数据文件",
on_click=lambda _: pick_files_dialog.pick_files(
allow_multiple=False,
allowed_extensions=["yaml"]
),
)
pick_files_dialog = FilePicker(on_result=pick_files_result)
selected_files = TextField(ref=test_file, label="测试数据", icon=icons.DATASET, read_only=True, )
page.overlay.append(pick_files_dialog)
page.add(
Container(client, col={"sm": 6, "md": 4, "xl": 2}),
Container(url, col={"sm": 6, "md": 4, "xl": 2}),
Container(project, col={"sm": 6, "md": 4, "xl": 2}),
Container(module, col={"sm": 6, "md": 4, "xl": 2}),
Container(tab, col={"sm": 6, "md": 4, "xl": 2}),
ResponsiveRow([
Container(selected_files, col={"sm": 10}),
Container(file, col={"sm": 2}),
]),
ResponsiveRow([
Container(ElevatedButton("运行", on_click=run), col={"sm": 1}, alignment=alignment.center),
Container(ElevatedButton("停止", on_click=stop), col={"sm": 1}, alignment=alignment.center),
]),
Container(Column(ref=greetings), )
)
if __name__ == '__main__': if __name__ == '__main__':
UI = False # 运行模式 py_run()
flet.app(target=get_ui_args) if UI is True else get_command_args()
...@@ -63,9 +63,10 @@ class BasePage(object): ...@@ -63,9 +63,10 @@ class BasePage(object):
:param wait_time: 等待时间 :param wait_time: 等待时间
""" """
element_obj = self.split_locator(locator) element_obj = self.split_locator(locator)
driver = self.dd.get_value('driver')
try: try:
wait = self.dd.get_value('element_wait_time') if wait_time is None else wait_time wait = self.dd.get_value('element_wait_time') if wait_time is None else wait_time
WebDriverWait(self.dd.get_value('driver'), wait, 1).until(ec.visibility_of_element_located(element_obj)) WebDriverWait(driver, wait).until(ec.visibility_of_element_located(element_obj))
log.debug('等待元素:{}'.format(locator)) log.debug('等待元素:{}'.format(locator))
return True return True
except TimeoutException: except TimeoutException:
...@@ -101,10 +102,11 @@ class BasePage(object): ...@@ -101,10 +102,11 @@ class BasePage(object):
# if self.wait_element(locator, sec) is True: # if self.wait_element(locator, sec) is True:
# log.debug('获取元素:{}'.format(locator)) # log.debug('获取元素:{}'.format(locator))
# with allure.step('获取元素:{}'.format(locator)): # with allure.step('获取元素:{}'.format(locator)):
driver = self.dd.get_value('driver')
wt = self.dd.get_value('element_wait_time')
element_obj = self.split_locator(locator) element_obj = self.split_locator(locator)
try: try:
element = WebDriverWait(self.dd.get_value('driver'), self.dd.get_value('element_wait_time'), 1).until( element = WebDriverWait(driver, wt).until(ec.visibility_of_element_located(element_obj))
ec.visibility_of_element_located(element_obj))
self.try_count = 0 self.try_count = 0
return element return element
except Exception as e: except Exception as e:
...@@ -124,10 +126,11 @@ class BasePage(object): ...@@ -124,10 +126,11 @@ class BasePage(object):
:param locator: 定位方法+定位表达式组合字符串,用逗号分隔,如'(xpath,//div[@class="username"])' :param locator: 定位方法+定位表达式组合字符串,用逗号分隔,如'(xpath,//div[@class="username"])'
:return: elements :return: elements
""" """
driver = self.dd.get_value('driver')
wt = self.dd.get_value('element_wait_time')
element_objs = self.split_locator(locator) element_objs = self.split_locator(locator)
try: try:
elements = WebDriverWait(self.dd.get_value('driver'), self.dd.get_value('element_wait_time'), 1).until( elements = WebDriverWait(driver, wt).until(ec.visibility_of_all_elements_located(element_objs))
ec.visibility_of_all_elements_located(element_objs))
# log.debug('获取元素列表:{}'.format(locator)) # log.debug('获取元素列表:{}'.format(locator))
return elements return elements
except Exception as e: except Exception as e:
...@@ -331,15 +334,15 @@ class BasePage(object): ...@@ -331,15 +334,15 @@ class BasePage(object):
element.click() element.click()
self.dd.get_value('driver').switch_to.window(self.dd.get_value('driver').window_handles[-1]) self.dd.get_value('driver').switch_to.window(self.dd.get_value('driver').window_handles[-1])
def js(self, script, xpath=None): def js(self, script, locator=None):
""" """
执行JavaScript 执行JavaScript
:param script: js语句 :param script: js语句
:param xpath: :param locator:
""" """
log.debug('执行JS语句:{}'.format(script)) log.debug('执行JS语句:{}'.format(script))
self.dd.get_value('driver').execute_script(script) if xpath is None else self.dd.get_value( driver = self.dd.get_value('driver')
'driver').execute_script(script, xpath) driver.execute_script(script) if locator is None else driver.execute_script(script, self.get_element(locator))
@staticmethod @staticmethod
def zoom(z_type, times): def zoom(z_type, times):
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment