Commit 346c94fa by Administrator

2.19提交

parent e20a0da0
...@@ -2,6 +2,7 @@ import time ...@@ -2,6 +2,7 @@ import time
import pyautogui import pyautogui
import pyperclip import pyperclip
from selenium.webdriver import Keys
from selenium.webdriver.support.select import Select from selenium.webdriver.support.select import Select
from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support import expected_conditions as EC
...@@ -18,8 +19,6 @@ class BasePage: ...@@ -18,8 +19,6 @@ class BasePage:
def __init__(self): def __init__(self):
self.driver = DriverUtils.get_web_driver() self.driver = DriverUtils.get_web_driver()
self.logger = None
self.set_logger()
# 查找元素 # 查找元素
...@@ -36,7 +35,13 @@ class BasePage: ...@@ -36,7 +35,13 @@ class BasePage:
# 定义该元素对于的文本 # 定义该元素对于的文本
ele = self.find_el(loc) ele = self.find_el(loc)
# 先清空 # 先清空
ele.clear() # ele.clear()
# 使用 JavaScript 强制清空输入框中的文本
# self.driver.execute_script("arguments[0].value = '';", ele)
# 使用键盘操作选中并删除文本
time.sleep(1)
ele.send_keys(Keys.CONTROL + "a") # 选中所有文本
ele.send_keys(Keys.DELETE) # 删除选中的文本
# 再输入 # 再输入
ele.send_keys(value) ele.send_keys(value)
...@@ -63,6 +68,11 @@ class BasePage: ...@@ -63,6 +68,11 @@ class BasePage:
# 调用select选择方法 # 调用select选择方法
sle.select_by_visible_text(text) sle.select_by_visible_text(text)
def get_text_loc(self,loc):
return self.find_el(loc).get_attribute("innerText")
def get_text_ele(self, ele):
return ele.get_attribute("innerText")
# 选择文件 # 选择文件
def select_document(self,path_str=None): def select_document(self,path_str=None):
time.sleep(1) time.sleep(1)
...@@ -87,38 +97,38 @@ class BasePage: ...@@ -87,38 +97,38 @@ class BasePage:
pyautogui.press('enter') # 模拟按下回车键 pyautogui.press('enter') # 模拟按下回车键
time.sleep(2) time.sleep(2)
# 设置日志记录器 # # 设置日志记录器
def set_logger(self): # def set_logger(self):
# 检查记录器是否已经存在,如果存在,则直接返回 # # 检查记录器是否已经存在,如果存在,则直接返回
if self.logger: # if self.logger:
return # return
#
logging.basicConfig(level=logging.INFO) # logging.basicConfig(level=logging.INFO)
self.logger = logging.getLogger(__name__) # self.logger = logging.getLogger(__name__)
# 创建一个处理程序,用于输出到控制台 # # 创建一个处理程序,用于输出到控制台
console_handler = logging.StreamHandler() # console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO) # console_handler.setLevel(logging.INFO)
# 创建一个处理程序,用于输出到文件 # # 创建一个处理程序,用于输出到文件
self.file_handler = logging.FileHandler('business_knowledge1.log', encoding='utf-8') # self.file_handler = logging.FileHandler('business_knowledge1.log', encoding='utf-8')
self.file_handler.setLevel(logging.INFO) # self.file_handler.setLevel(logging.INFO)
# 创建一个格式化器,用于设置日志格式 # # 创建一个格式化器,用于设置日志格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') # formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 将格式化器添加到处理程序 # # 将格式化器添加到处理程序
console_handler.setFormatter(formatter) # console_handler.setFormatter(formatter)
self.file_handler.setFormatter(formatter) # self.file_handler.setFormatter(formatter)
# 先清空已有的处理程序 # # 先清空已有的处理程序
self.logger.handlers.clear() # self.logger.handlers.clear()
# 检查记录器中是否已经存在相同类型的处理程序,如果不存在,则添加 # # 检查记录器中是否已经存在相同类型的处理程序,如果不存在,则添加
if console_handler not in self.logger.handlers: # if console_handler not in self.logger.handlers:
self.logger.addHandler(console_handler) # self.logger.addHandler(console_handler)
if self.file_handler not in self.logger.handlers: # if self.file_handler not in self.logger.handlers:
self.logger.addHandler(self.file_handler) # self.logger.addHandler(self.file_handler)
print(len(self.logger.handlers)) # print(len(self.logger.handlers))
def log_info(self, message):
self.logger.info(message)
# #
def close_logger(self): # def log_info(self, message):
self.file_handler.close() # self.logger.info(message)
# #
# def close_logger(self):
# self.file_handler.close()
...@@ -34,12 +34,17 @@ class BusinessKnowledgePage(BasePage): ...@@ -34,12 +34,17 @@ class BusinessKnowledgePage(BasePage):
self.folders = (By.XPATH, '//*[@id="App"]/div/section/div[1]/div[2]/div/div/div[1]/div[2]') # 文件夹列表 self.folders = (By.XPATH, '//*[@id="App"]/div/section/div[1]/div[2]/div/div/div[1]/div[2]') # 文件夹列表
self.newFolder = (By.XPATH, '//*[@id="App"]/div/section/div[1]/div[2]/div/div/div[1]/button[2]/span') # 新建文件夹 self.newFolder = (By.XPATH, '//*[@id="App"]/div/section/div[1]/div[2]/div/div/div[1]/button[2]/span') # 新建文件夹
self.folderName = (By.XPATH, '//*[@id="folderName"]') # 输入文件夹名 self.folderName = (By.XPATH, '//*[@id="folderName"]') # 输入文件夹名
self.select_folder = (By.XPATH,'//*[@id="App"]/div/section/div[1]/div[2]/div/div/div[1]/div[2]/div[@class="Catalog-item active"]/span')
self.ensure = (By.XPATH, '/html/body/div[3]/div/div[2]/div/div[2]/div[3]/button[2]/span') # 确定按钮 self.ensure = (By.XPATH, '/html/body/div[3]/div/div[2]/div/div[2]/div[3]/button[2]/span') # 确定按钮
self.more = (By.XPATH, '//*[@id="App"]/div/section/div[1]/div[2]/div/div/div[1]/div[2]/div[3]/i') # 更多 self.more = (By.XPATH, '//*[@id="App"]/div/section/div[1]/div[2]/div/div/div[1]/div[2]/div[3]/i') # 更多
self.updateFolderName = (By.XPATH, '/html/body/div[3]/div/div/ul/li[1]/span/div') # 修改名称 self.updateFolderName = (By.XPATH, '/html/body/div[3]/div/div/ul/li[1]/span/div') # 修改名称
self.deleteFolder = (By.XPATH, '/html/body/div[3]/div/div/ul/li[2]/span/div') # 删除 self.deleteFolder = (By.XPATH, '/html/body/div[3]/div/div/ul/li[2]/span/div') # 删除
self.ensureDelete = (By.XPATH, '/html/body/div[4]/div/div[2]/div/div[2]/div[3]/button[2]/span') # 确认 self.ensureDelete = (By.XPATH, '/html/body/div[4]/div/div[2]/div/div[2]/div[3]/button[2]/span') # 确认
self.moreFolderName = (By.XPATH,'//*[@id="App"]/div/section/div[1]/div[2]/div/div/div[1]/div[2]/div[3]/span')
self.searchInputText = ( self.searchInputText = (
By.XPATH, '//*[@id="App"]/div/section/div[1]/div[2]/div/div/div[1]/div[1]/span/input') # 搜索文本框 By.XPATH, '//*[@id="App"]/div/section/div[1]/div[2]/div/div/div[1]/div[1]/span/input') # 搜索文本框
self.subscriptionWebsiteButton = ( self.subscriptionWebsiteButton = (
...@@ -100,6 +105,10 @@ class BusinessKnowledgePage(BasePage): ...@@ -100,6 +105,10 @@ class BusinessKnowledgePage(BasePage):
self.input_text_by_loc(self.folderName, updateFolderName) self.input_text_by_loc(self.folderName, updateFolderName)
time.sleep(1) time.sleep(1)
self.find_el(self.ensureDelete).click() # 点击确认 self.find_el(self.ensureDelete).click() # 点击确认
time.sleep(1)
# 返回修改后的文件名
return self.get_text_loc(self.moreFolderName)
# 遍历点击文件夹 # 遍历点击文件夹
def traverseFolder(self): def traverseFolder(self):
...@@ -116,6 +125,29 @@ class BusinessKnowledgePage(BasePage): ...@@ -116,6 +125,29 @@ class BusinessKnowledgePage(BasePage):
def searchDocument(self, keyName=None): def searchDocument(self, keyName=None):
self.input_text_by_loc(self.searchInputText, keyName) self.input_text_by_loc(self.searchInputText, keyName)
time.sleep(2) time.sleep(2)
# 返回搜索到的所有文档
folders = self.find_el(self.folders).find_elements(By.XPATH,"./div")
documents = []
for folder in folders:
folder.click()
time.sleep(1)
# 获取所有文档
documentStep = self.find_el(self.document_list_helper.documentListDiv).find_elements(By.XPATH,"./tr")
documents.extend(documentStep)
print(documents)
return documents
# 判断这些文档中是否存在某些关键词
def isExistKeyInDocument(self,key_name=None,documents=None):
flag = True
for document in documents:
actual_document_name = document.find_element(By.XPATH,"./td[2]/div/div").getAttribute("title")
if not actual_document_name.find(key_name):
flag = False
logger.info("搜索失败,搜索出额外文档")
return flag
""" """
网站订阅 网站订阅
...@@ -217,7 +249,7 @@ class UploadDocumentHelper(BasePage): ...@@ -217,7 +249,7 @@ class UploadDocumentHelper(BasePage):
self.ensureButton = (By.XPATH,'/html/body/div[3]/div/div[2]/div/div[2]/div[3]/div/button[2]') # 确定 self.ensureButton = (By.XPATH,'/html/body/div[3]/div/div[2]/div/div[2]/div[3]/div/button[2]') # 确定
self.urlText = (By.XPATH,'//*[@id="url"]') self.urlText = (By.XPATH,'//*[@id="url"]')
self.getContentButton = (By.CLASS_NAME,'ant-btn ant-btn-primary') self.getContentButtons = (By.CLASS_NAME,'btn-wrap')
""" """
方式一:上传文档 方式一:上传文档
...@@ -253,13 +285,9 @@ class UploadDocumentHelper(BasePage): ...@@ -253,13 +285,9 @@ class UploadDocumentHelper(BasePage):
time.sleep(1) time.sleep(1)
self.input_text_by_loc(self.urlText,url_link) self.input_text_by_loc(self.urlText,url_link)
time.sleep(2) time.sleep(2)
button = self.find_el(self.getContentButton) buttons = self.find_el(self.getContentButtons).find_elements(By.XPATH,"./button")
# 使用 ActionChains 将鼠标移动到按钮上再点击 buttons[1].click()
action = ActionChains(driver) time.sleep(4)
action.move_to_element(button).click().perform()
# 使用JavaScript将焦点移动到页面其他元素,使文本域失去焦点
# driver.execute_script("arguments[0].blur();", text_area)
time.sleep(2)
""" """
...@@ -281,6 +309,7 @@ class DocumentListControlHelper(BasePage): ...@@ -281,6 +309,7 @@ class DocumentListControlHelper(BasePage):
# self.documents = self.find_son_elements(self.find_el(self.documentListDiv), self.documentDiv) # self.documents = self.find_son_elements(self.find_el(self.documentListDiv), self.documentDiv)
self.controlList = (By.XPATH,'//*[@id="App"]/div/section/div[1]/div[2]/div/div/div[2]/div/div[2]/div[3]/div/div/div/div/div/div/div/table/tbody/tr[1]/td[5]/div/span/ul') self.controlList = (By.XPATH,'//*[@id="App"]/div/section/div[1]/div[2]/div/div/div[2]/div/div[2]/div[3]/div/div/div/div/div/div/div/table/tbody/tr[1]/td[5]/div/span/ul')
self.firstDocument = (By.XPATH,'//*[@id="App"]/div/section/div[1]/div[2]/div/div/div[2]/div/div[2]/div[2]/div/div/div/div/div/div/div/table/tbody/tr[1]/td[3]/div/span')
# 删除 # 删除
def documentListDeleteControl(self,count=None): def documentListDeleteControl(self,count=None):
documents = self.find_son_elements(self.find_el(self.documentListDiv), self.documentDiv) documents = self.find_son_elements(self.find_el(self.documentListDiv), self.documentDiv)
...@@ -406,6 +435,11 @@ class DocumentListControlHelper(BasePage): ...@@ -406,6 +435,11 @@ class DocumentListControlHelper(BasePage):
""" """
文档对话 文档对话
""" """
"""
文档对话
"""
class DocumentDialogueHelper(BasePage): class DocumentDialogueHelper(BasePage):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
...@@ -423,11 +457,12 @@ class DocumentDialogueHelper(BasePage): ...@@ -423,11 +457,12 @@ class DocumentDialogueHelper(BasePage):
self.minificationButton = (By.XPATH,'//*[@id="App"]/div/section/div[1]/div[2]/div/div[1]/div/div/div[2]/div/div[1]/div[2]/i[1]') self.minificationButton = (By.XPATH,'//*[@id="App"]/div/section/div[1]/div[2]/div/div[1]/div/div/div[2]/div/div[1]/div[2]/i[1]')
# 放大 # 放大
self.maxficationButton = (By.XPATH,'//*[@id="App"]/div/section/div[1]/div[2]/div/div[1]/div/div/div[2]/div/div[1]/div[2]/i[2]') self.maxficationButton = (By.XPATH,'//*[@id="App"]/div/section/div[1]/div[2]/div/div[1]/div/div/div[2]/div/div[1]/div[2]/i[2]')
# 全屏 # 全屏
self.fullScreenButton = (By.XPATH,'//*[@id="App"]/div/section/div[1]/div[2]/div/div[1]/div/div/div[2]/div/div[1]/div[2]/i[3]') self.fullScreenButton = (By.XPATH,'//*[@id="App"]/div/section/div[1]/div[2]/div/div[1]/div/div/div[2]/div/div[1]/div[2]/i[3]')
# 下拉 # 下拉
self.xialaButton = (By.XPATH,'//*[@id="App"]/div/section/div[1]/div[2]/div/div[1]/div/div/div[2]/div/div[1]/div[2]/div[1]') self.fangdaButton = (By.XPATH,'//*[@id="App"]/div/section/div[1]/div[2]/div/div[1]/div/div/div[2]/div/div[1]/div[2]/div[1]')
self.xialaDataList = (By.XPATH,'/html/body/div[6]/div/div/div/div[2]/div[1]/div/div') self.fangdaDataList = (By.CLASS_NAME,'rc-virtual-list-holder-inner')
# 对话 文档解读 笔记 # 对话 文档解读 笔记
self.typeButtons = (By.XPATH,'//*[@id="App"]/div/section/div[1]/div[2]/div/div[1]/div/div/div[3]/ul') self.typeButtons = (By.XPATH,'//*[@id="App"]/div/section/div[1]/div[2]/div/div[1]/div/div/div[3]/ul')
# 推荐问题 # 推荐问题
...@@ -443,6 +478,9 @@ class DocumentDialogueHelper(BasePage): ...@@ -443,6 +478,9 @@ class DocumentDialogueHelper(BasePage):
# 对话内容 # 对话内容
self.dialogueContent = (By.XPATH,'//*[@id="App"]/div/section/div[1]/div[2]/div/div[1]/div/div/div[3]/div[2]') self.dialogueContent = (By.XPATH,'//*[@id="App"]/div/section/div[1]/div[2]/div/div[1]/div/div/div[3]/div[2]')
# 导出解读
self.deriveDocumentSummary = (By.XPATH,'//*[@id="App"]/div/section/div[1]/div[2]/div/div[1]/div/div/div[3]/button')
# 文件夹对话入口 # 文件夹对话入口
def folderDialogueControl(self): def folderDialogueControl(self):
self.find_el(self.folderDialogueButton).click() self.find_el(self.folderDialogueButton).click()
...@@ -502,20 +540,66 @@ class DocumentDialogueHelper(BasePage): ...@@ -502,20 +540,66 @@ class DocumentDialogueHelper(BasePage):
logger.info(f"-------------全屏操作--------") logger.info(f"-------------全屏操作--------")
time.sleep(1) time.sleep(1)
# 对话 文档解读 笔记 1 2 3 # 对话 文档解读 笔记 1 2 3
def menu_types_control(self, type=None): def menu_types_control(self, type=None):
time.sleep(1) time.sleep(1)
menus = self.find_el(self.typeButtons).find_elements(By.XPATH,"./li") menus = self.find_el(self.typeButtons).find_elements(By.XPATH,"./li")
i = 0 i = 0
for menu in menus: for menu in menus:
if type == i: if (type-1) == i:
menu.click() menu.click()
menu_name = menu.find_element(By.XPATH, "./span").get_attribute("innerText") menu_name = menu.find_element(By.XPATH, "./span").get_attribute("innerText")
logger.info(f"此时菜单点击的为:{menu_name}") logger.info(f"此时菜单点击的为:{menu_name}")
time.sleep(1) time.sleep(1)
return return
i = i+1 i = i+1
# self.close_logger()
# 选择特定的放大倍数
def select_magnification_by(self,magnification_value):
magnification_value = str(magnification_value)+"%"
self.find_el(self.fangdaButton).click()
time.sleep(1)
magnificatios = self.find_el(self.fangdaDataList).find_elements(By.XPATH,"./div") # 获取所有的方法倍数数据
for magnification in magnificatios:
title_name = magnification.get_attribute("title")
if title_name == magnification_value:
magnification.click() # 点击完成
logger.info(f"点击选择了{title_name}")
return
# 滑动查看文章内容
"""
对话内容可:添加到笔记 复制 点赞 点踩
文档解读内容可:添加到笔记 复制
笔记可:复制 删除
添加到笔记 复制 点赞 点踩 删除
1 2 3 4 5
"""
def small_control(self, menu_type = None ):
pass
# 导出解读
def derive_document_summary_control(self):
self.menu_types_control(2)
time.sleep(1)
self.find_el(self.deriveDocumentSummary).click()
logger.info("点击文档解读")
# 导出笔记
def derive_note_control(self):
self.menu_types_control(3)
time.sleep(1)
self.find_el(self.deriveDocumentSummary).click()
logger.info("点击导出笔记")
# 推荐问题 # 推荐问题
def recommend_control(self, count=None): def recommend_control(self, count=None):
...@@ -523,10 +607,15 @@ class DocumentDialogueHelper(BasePage): ...@@ -523,10 +607,15 @@ class DocumentDialogueHelper(BasePage):
self.find_el(self.recommendButton).click() self.find_el(self.recommendButton).click()
time.sleep(1) time.sleep(1)
questions = self.find_el(self.recommendQuestionsDataList).find_elements(By.XPATH,"./li") questions = self.find_el(self.recommendQuestionsDataList).find_elements(By.XPATH,"./li")
logger.info(f"此处有{len(questions)}个推荐问题")
time.sleep(1) time.sleep(1)
questions[count-1].click() questions[count-1].click()
question_name = questions[count-1].get_element(By.XPATH,"./div/span/div/span/div/span/span[2]").get_attribute("innerText")
logger.info(f"选择的问题为{question_name}")
time.sleep(9) time.sleep(9)
# 切换对话的对象 文件夹/文档
# 输入问题并点击发送 # 输入问题并点击发送
def send_question_control(self, question=None): def send_question_control(self, question=None):
time.sleep(1) time.sleep(1)
...@@ -558,13 +647,16 @@ if __name__ == '__main__': ...@@ -558,13 +647,16 @@ if __name__ == '__main__':
time.sleep(1) time.sleep(1)
businessKnowledge.document_dialogue_helper.folderDialogueControl() businessKnowledge.document_dialogue_helper.folderDialogueControl()
time.sleep(1) time.sleep(1)
businessKnowledge.document_dialogue_helper.menu_types_control(1) businessKnowledge.document_dialogue_helper.select_magnification_by("50")
time.sleep(2)
# businessKnowledge.document_dialogue_helper.menu_types_control(1)
# businessKnowledge.document_dialogue_helper.toggle_document_control() # businessKnowledge.document_dialogue_helper.toggle_document_control()
# businessKnowledge.document_dialogue_helper.toggle_document_folder_dialogue_control() # businessKnowledge.document_dialogue_helper.toggle_document_folder_dialogue_control()
# businessKnowledge.document_list_helper.copy_document_control(2,"团队共享知识库") # businessKnowledge.document_list_helper.copy_document_control(2,"团队共享知识库")
# businessKnowledge.document_list_helper.documentListDialogueControl(2) # businessKnowledge.document_list_helper.documentListDialogueControl(2)
# businessKnowledge.document_list_helper.documentListControl(3) # businessKnowledge.document_list_helper.documentListControl(3)
time.sleep(2)
# businessKnowledge.upload_document_helper.uploadUrlControl("https://blog.csdn.net/FezZZZ/article/details/120878765") # businessKnowledge.upload_document_helper.uploadUrlControl("https://blog.csdn.net/FezZZZ/article/details/120878765")
# time.sleep(2) # time.sleep(2)
......
from selenium.webdriver.common.by import By
from Pages.businessKnowledge_page import BusinessKnowledgePage
from Pages.login_page import LoginPage
from Util.Util import DriverUtils
import time
from loguru import logger
class TestBusinessKnowledge:
def setup_class(self):
# 在所有的测试用例脚本之前执行一次
# 完成公共部分初始化
self.driver = DriverUtils.get_web_driver()
self.login_page = LoginPage()
self.business_page = BusinessKnowledgePage()
def teardown_class(self):
# 在所有的测试用例脚本之后执行一次
self.driver.quit()
pass
def setup_method(self):
# 在每个测试用例脚本之前执行一次
self.driver.get('https://rays7.raysgo.com/login')
self.login_page.login_username("17373027967","3149390154Li")
self.business_page.entranceAi() # 进入AI编辑室
self.business_page.entranceBusinessKnowledge() # 进入企业知识库
time.sleep(3)
def teardown_method(self):
# 在每个测试用例脚本之后执行一次
pass
# 新建文件夹 0-20 重复文件名
def test_newFolder_case001(self):
folder_name = "XXXXX"
self.business_page.newFolderControl(folder_name)
time.sleep(3)
# 断言
folders = self.business_page.find_el(self.business_page.folders).find_elements(By.XPATH,".//span")
assert folder_name == self.business_page.get_text_ele(folders[(len(folders)-1)])
logger.info("新建文件成功")
# 更新文件夹名字 0-20 重复文件名
def test_updateFolder_case001(self):
expect_folder_name = "xxxx322x"
actual_folder_name = self.business_page.updateFolderControl(expect_folder_name)
time.sleep(2)
# 断言
assert actual_folder_name == expect_folder_name
logger.info("更新文件名字成功")
# 删除文件夹
def test_deleteFolder_case001(self):
self.business_page.deleteFolderControl()
# 切换文件夹
def test_traverse_folder(self):
try:
self.business_page.traverseFolder()
assert 1 == 1
except Exception as e:
logger.info("错误类型:{e}")
# 搜索
def test_search_document(self, key_name = "世界"):
try:
documents = self.business_page.searchDocument(key_name)
flag = self.business_page.isExistKeyInDocument(key_name,documents)
assert flag == True
except Exception as e:
logger.info(f"发生报错:报错信息为{e}")
# 文档上传
def test_upload_document_case001(self):
stry_paths = []
stry_paths.append("t"+str(0+1)+".txt")
self.business_page.upload_document_helper.uploadDocumentControl(stry_paths)
time.sleep(10)
# 断言
assert "学习成功" == self.business_page.get_text_ele(self.business_page.document_list_helper.firstDocument)
# 导入网站
def test_upload_website_case001(self):
self.business_page.upload_document_helper.uploadUrlControl("https://blog.csdn.net/FezZZZ/article/details/120878765")
time.sleep(10)
# 断言
assert "学习成功" == self.business_page.get_text_ele(self.business_page.document_list_helper.firstDocument)
...@@ -15,3 +15,5 @@ class DriverUtils: ...@@ -15,3 +15,5 @@ class DriverUtils:
cls.__driver.implicitly_wait(10) cls.__driver.implicitly_wait(10)
return cls.__driver return cls.__driver
...@@ -4,3 +4,7 @@ ...@@ -4,3 +4,7 @@
2024-02-19T04:58:18.926796+0800 - INFO - 登陆成功 2024-02-19T04:58:18.926796+0800 - INFO - 登陆成功
2024-02-19T05:00:45.136661+0800 - INFO - 登陆成功 2024-02-19T05:00:45.136661+0800 - INFO - 登陆成功
2024-02-19T05:12:21.817077+0800 - INFO - 此时菜单点击的为:文档解读 2024-02-19T05:12:21.817077+0800 - INFO - 此时菜单点击的为:文档解读
2024-02-19T11:11:47.462293+0800 - INFO - 点击选择了50%
2024-02-19T18:04:49.471174+0800 - INFO - 发生报错:报错信息为'WebElement' object has no attribute 'get_element'
2024-02-19T18:10:18.397061+0800 - INFO - 发生报错:报错信息为'WebElement' object has no attribute 'get_element'
2024-02-19T18:15:01.900058+0800 - INFO - 发生报错:报错信息为'WebElement' object has no attribute 'getAttribute'
Markdown is supported
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