addproject

This commit is contained in:
qiaoxinjiu
2026-01-22 19:10:37 +08:00
commit 6994b185a3
184 changed files with 21039 additions and 0 deletions

View File

@@ -0,0 +1,283 @@
# -*- coding: UTF-8 -*-
import os
import time
import platform
from seleniumwire import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.select import Select
from base_framework.public_tools.read_config import get_current_config, ReadConfig, InitConfig
from base_framework.base_config.current_pth import env_choose_path
from copy import copy, deepcopy
from selenium.webdriver.common.action_chains import ActionChains
cull_path = os.path.dirname(os.path.abspath(__file__))
plugs = os.path.abspath(os.path.join(cull_path, '../{}'.format('/platform_tools/plugins/headerenv.crx')))
cc_driver = os.path.abspath(os.path.join(cull_path, '../{}'.format('/public_business/CC/webdriver/chromedriver.exe')))
DEFAULT_TIMEOUT = 10
class DriverInit(InitConfig):
def __init__(self, driver_path=None):
# super(DriverInit, self).__init__()
InitConfig.__init__(self, run_user_name=None, current_evn=None)
self.driver_path = cc_driver if not driver_path else driver_path
self.config = ReadConfig(env_choose_path)
self.jira_id = ReadConfig(env_choose_path).get_value('run_jira_id', 'huohua-podenv')
self.option = webdriver.ChromeOptions()
self.option.add_argument('--no-sandbox')
self.option.add_argument('--disable-gpu')
self.option.add_argument('--disable-dev-shm-usage')
# self.option.headless = True
self.option.add_extension(plugs)
# self._init_driver()
def _init_driver(self):
self.driver = webdriver.Chrome(executable_path=self.driver_path, options=self.option)
self.driver.scopes = [
'.*huohua.cn.*', '.*\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d+.*', '.*allschool.com', '.*sparkedu.com'
]
self.driver.implicitly_wait(30)
self.driver.maximize_window()
self.actions = ActionChains(self.driver)
self.wait = WebDriverWait(self.driver, timeout=60)
if self.jira_id:
self._set_independent_environment()
def _set_independent_environment(self):
backend = self.jira_id
frontend = 'feature/%s' % self.jira_id
new_loc = ('xpath', '/html/body/div/div[3]/button/div/div/i')
# 独立环境名称
rule_name_loc = ('id', 'rule-name')
# 规则类型
rule_type_loc = ('xpath', '//*[@id="edit-page"]/div[2]/div[1]/div/div[2]/div[2]/div[2]/div[3]/div')
# 头名称
rule_headerName_loc = ('id', 'rule-headerName')
# 头内容
rule_headerValue_loc = ('id', 'rule-headerValue')
# 保存
create_loc = ('xpath', '//*[@id="edit-page"]/div[2]/div[2]/div[2]/div[2]/button/div/div')
# js = 'window.open("chrome-extension://eningockdidmgiojffjmkdblpjocbhgh/options/options.html");'
# self.driver.execute_script(js)
self.driver.get("chrome-extension://eningockdidmgiojffjmkdblpjocbhgh/options/options.html")
rule_headerName = 'huohua-podenv'
rule_headerValue = backend
self.clickElement(new_loc)
self.sendKeysElement(rule_name_loc, "back")
self.clickElement(rule_type_loc)
self.sendKeysElement(rule_headerName_loc, rule_headerName)
self.sendKeysElement(rule_headerValue_loc, rule_headerValue)
self.clickElement(create_loc)
rule_headerName = 'huohua-feature'
rule_headerValue = frontend
self.clickElement(new_loc)
self.sendKeysElement(rule_name_loc, "front")
self.clickElement(rule_type_loc)
self.sendKeysElement(rule_headerName_loc, rule_headerName)
self.sendKeysElement(rule_headerValue_loc, rule_headerValue)
self.clickElement(create_loc)
def waitEleDisappear(self, locator, timeout=10):
count = 0
while count <= timeout:
try:
self.wait.until(ec.invisibility_of_element_located(locator=locator))
break
except Exception as error:
time.sleep(1)
count += 1
def elementScroolToView(self, locator):
ele = self.findElement(locator=locator, timeout=10)
self.driver.execute_script("arguments[0].focus()", ele)
self.driver.execute_script("arguments[0].scrollIntoView();", ele)
def findElement(self, locator, timeout=10):
"""
| 功能说明: | 传入元素定位器,定位到该元素,返回第一个元素|
| 传入参数: | locator |
举例说明:
"""
element = WebDriverWait(self.driver, timeout).until(ec.presence_of_element_located(locator))
return element
def findElements(self, locator, timeout=10):
"""
| 功能说明: | 传入元素定位器,定位到该元素,返回所有元素|
| 传入参数: | locator |
举例说明:
"""
element = WebDriverWait(self.driver, timeout).until(ec.presence_of_all_elements_located(locator))
return element
def clickElement(self, locator, timeout=10):
"""
| 功能说明: | 传入元素定位器,定位到该元素,普通方法点击|
| 传入参数: | locator |
举例说明:
"""
element = self.findElement(locator, timeout)
element.click()
def clickElement_by_JS(self, locator=None, element=None, timeout=10):
"""
| 功能说明: | 传入元素定位器定位到该元素以JS的方式点击|
| 传入参数: | locator | 元素定位器 |
| element | 页面对象 |
举例说明:
"""
if not element and locator:
obj = self.findElement(locator, timeout)
self.driver.execute_script("arguments[0].click();", obj)
elif element and not locator:
self.driver.execute_script("arguments[0].click();", element)
else:
raise Exception('不支持的传参方式locator和element必须且只能传一个')
def sendKeysElement(self, locator, text, timeout=10):
"""
| 功能说明: | 传入元素定位器定位到该元素清空输入框写入text|
| 传入参数: | locatortext |
举例说明:
"""
element = self.findElement(locator, timeout)
element.send_keys(Keys.CONTROL, 'a')
element.send_keys(text)
def getElementText(self, locator, timeout=10):
"""
| 功能说明: | 传入元素定位器,定位到该元素,返回该元素的文本值|
| 传入参数: | locator |
举例说明:
"""
element = self.findElement(locator, timeout)
return element.text
def clickSingleBox(self, locator, timeout=10):
"""
| 功能说明: | 传入单选框元素定位器,定位到该元素,依次点击单选框|
| 传入参数: | locator |
举例说明:
"""
elements = self.findElements(locator, timeout)
for element in elements:
self.driver.execute_script("arguments[0].click();", element)
time.sleep(1.5)
def selectDropDownBox(self, locator, index=0, timeout=10):
"""
| 功能说明: | 传入下拉框定位器定位到该元素选择下拉框的第index个选项|
| 传入参数: | locatorindex |
举例说明:
"""
select = Select(self.findElement(locator, timeout))
select.select_by_index(index)
# 选择多选框-->全选
def clickCheckbox(self, locator, timeout=10):
"""
| 功能说明: | 传入多选框元素定位器,定位到该元素,全选|
| 传入参数: | locator |
举例说明:
"""
checkbox = self.findElements(locator, timeout)
for i in checkbox:
if not i.is_selected():
i.click()
def uploadFile(self, locator, path, timeout=10):
"""
| 功能说明: | 传入元素定位器定位到该元素传入文件路径只适用于input标签|
| 传入参数: | locator |
举例说明:
"""
element = self.findElement(locator, timeout)
element.send_keys(path)
def roll_windows(self, x=0, y=0):
"""
滑动窗口
:param x: x轴距离
:param y: y轴距离
:return: 无
"""
self.driver.execute_script("window.scrollBy({},{})".format(x, y))
def back_window(self):
"""
返回上一页(浏览器工具栏向左箭头)
:return: 无
"""
self.driver.back()
def forward_window(self):
"""
前进一页(浏览器工具栏向右箭头)
:return: 无
"""
self.driver.forward()
def close_current_window(self):
"""
关闭当前窗口
:return: 无
"""
self.driver.close()
def get_window_title(self):
"""
关闭当前窗口
:return: 无
"""
current_title = self.driver.title
return current_title
def get_element_attribute_value(self, locator, attr: str, timeout=10):
"""
关闭当前窗口
:param locator 定位器
:param attr 属性名
:param timeout 元素查找超时时间
:return: 无
"""
obj = self.findElement(locator, timeout=timeout)
attr_value = obj.get_attribute(attr)
return attr_value
def modify_tag_attribution(self, locator, attr, value, timeout=10):
"""
修改页签属性
:param locator: 需要修改的元素定位器
:param attr: 修改属性名
:param value: 修改后的值
:param timeout: 超时时间
:return:
"""
obj = self.findElement(locator, timeout)
self.driver.execute_script("arguments[0].{attr}={value};".format(attr=attr, value=value), obj)
def input_to_readonly_tag(self, locator, text, timeout=10):
"""
带只读属性的标签输入
:param locator: 元素定位器
:param text: 输入内容
:param timeout: 超时时间
:return:无
"""
obj = self.findElement(locator, timeout)
self.driver.execute_script("arguments[0].removeAttribute('readonly');", obj)
self.sendKeysElement(locator=locator, text=text)
def takeScreenshot(self, savePath, pictureName):
"""
| 功能说明: | 截取浏览器当前页面|
| 传入参数: | savePath保存地址 |
| | pictureName图片保存名称
举例说明:
"""
picturePath = os.path.join(savePath, pictureName + '.png')
self.driver.get_screenshot_as_file(picturePath)