自动添加菜品,加入运行中遇到的异常,生成日志文件...<工作中场景...>
"""
很弱智的小脚本,记录下。也许以后看到会笑,因为太幼稚或者证明曾经也努力过。so...
"""
"""
这次厉害了,厉害了....
"""
from selenium import webdriver
# 导入封装的Logger
from com.learn_logging.logs_test import Logger
# 显示等待
from selenium.webdriver.support.wait import WebDriverWait
# 鼠标事件
from selenium.webdriver.common.action_chains import ActionChains
# 生成随机数字
import random
# 所有异常类
from selenium.common.exceptions import *
# 键盘模块
from selenium.webdriver.common.keys import Keys
import time
from selenium import webdriver
# 导入日志模块
from com.learn_logging.logs_test import Logger
#显示等待
from selenium.webdriver.support.wait import WebDriverWait
# 鼠标事件
from selenium.webdriver.common.action_chains import ActionChains
# 随机价格
import random
# 所有异常
from selenium.common.exceptions import *
# 键盘模块
from selenium.webdriver.common.keys import Keys
import time class Item:
def __init__(self):
# 初始化browser
self.browser = webdriver.Chrome()
self.url = 'http://xxxxxxxxxxx/login.jsp'
self.browser.get(self.url)
self.browser.implicitly_wait(10)
self.browser.maximize_window() def Clear(self):
# 清空输入框
self.browser.find_element_by_id('tenentid').clear()
self.browser.find_element_by_id('loginUserName').clear()
self.browser.find_element_by_id('password').clear() def Loggin(self, tenant, username, password):
# 参数化商户号、用户名、密码
self.browser.find_element_by_id('tenentid').send_keys(tenant)
self.browser.find_element_by_id('loginUserName').send_keys(username)
self.browser.find_element_by_id('password').send_keys(password)
self.browser.find_element_by_id('login').click() def Check(self):
# 检查登录是否成功
t = WebDriverWait(self.browser, 10, 1).until(lambda x: x.find_element_by_xpath(
"//ul[@id='first_nav']/a[2]").get_attribute('text').strip())
if t == '源数据管理':
Logger().log().info('登录成功^_^')
else:
Logger().log().info('登录失败T_T') def Go_item(self):
# 点击源数据管理
WebDriverWait(self.browser, 10, 1).until(lambda x: x.find_element_by_xpath(
"//ul[@id='first_nav']/a[2]/span")).click()
# 点击运营资料设置
WebDriverWait(self.browser, 10, 1).until(lambda x: x.find_element_by_xpath(
"//div[@id='_f2001']/a/span/span")).click()
# 鼠标事件,调用封装函数
self.Find_element(time.time()) def Random_add_item(self):
# 切换iframe
self.browser.switch_to_frame('iframe2167')
WebDriverWait(self.browser, 10, 1).until(lambda x: x.find_element_by_xpath(
"//ul[@id='menu_tree']/li/ul/li/ul/li/div/span[5]")).click()
WebDriverWait(self.browser, 10, 1).until(lambda x: x.find_element_by_xpath(
"//*[@id='_add']/span/span[1]")).click()
try:
file_name = 'item_names.txt'
with open(file_name, encoding='gbk') as f_obj:
for date in f_obj:
price = random.randint(1, 10)
date = date.strip()
# 菜品名称
n = WebDriverWait(self.browser, 10, 1).until(lambda x:x.find_element_by_xpath(
"//*[@id='ff']/table/tbody/tr[1]/td[6]/span/textarea"))
n.clear()
n.send_keys(Keys.BACKSPACE)
n.send_keys(date)
# 菜品价格
WebDriverWait(self.browser, 10, 1).until(lambda x: x.find_element_by_xpath(
"//*[@id='tt123']/div[1]/div[3]/ul/li[2]/a/span[1]")).click()
# 判断是否已经存在菜品价格数据
price_type = self.browser.find_element_by_xpath('//*[@id="datagrid-row-r4-2-0"]/td[7]/div').text
if price_type == '有效':
# 编辑 //*[@id="datagrid-row-r4-2-0"]/td[7]/div
WebDriverWait(self.browser, 10, 1).until(lambda x: x.find_element_by_xpath(
"//*[@id='datagrid-row-r4-2-0']/td[3]/div/div/span[1]")).click()
self.browser.find_element_by_xpath(
"//*[@id='datagrid-row-r4-2-0']/td[5]/div/table/tbody/tr/td/span/input[1]").clear()
WebDriverWait(self.browser, 10, 1).until(lambda x: x.find_element_by_xpath(
"//*[@id='datagrid-row-r4-2-0']/td[4]/div/table/tbody/tr/td/span/input[1]")).send_keys('例')
self.browser.find_element_by_xpath(
"//*[@id='datagrid-row-r4-2-0']/td[5]/div/table/tbody/tr/td/span/input[1]").send_keys(price)
else:
# 新增
WebDriverWait(self.browser, 10, 1).until(lambda x: x.find_element_by_xpath(
"//*[@id='edit_add1']/span/span[1]")).click()
WebDriverWait(self.browser, 10, 1).until(lambda x: x.find_element_by_xpath(
"//*[@id='datagrid-row-r4-2-0']/td[4]/div/table/tbody/tr/td/span/input[1]")).send_keys('例')
WebDriverWait(self.browser, 10, 1).until(lambda x: x.find_element_by_xpath(
"//*[@id='datagrid-row-r4-2-0']/td[5]/div/table/tbody/tr/td/span/input[1]")).send_keys(price)
# 保存价格
WebDriverWait(self.browser, 10, 1).until(lambda x: x.find_element_by_xpath(
"//*[@id='datagrid-row-r4-2-0']/td[3]/div/div/span")).click()
# 保存并继续
self.browser.find_element_by_xpath("//*[@id='btn_save_goon']/span/span").click()
# 菜品名称已经存在异常提示
time.sleep(2)
item_name = self.browser.find_element_by_xpath('/html/body/div[26]/div[2]')
# y1 = item_name.is_displayed()
if item_name.text == '菜品名称已存在!':
Logger().log().critical('保存菜品失败,原因:%s' % item_name.text)
Logger().log().critical('保存失败的菜品名称是:%s' % date)
y1 = item_name.is_displayed()
if y1:
# 关闭错误提示
self.browser.find_element_by_xpath('/html/body/div[26]/div[1]/div[2]/a').click()
continue
else:
continue
# 保存成功提示框
WebDriverWait(self.browser, 10, 1).until(lambda x: x.find_element_by_xpath(
"//*[contains(text(),'确定')]")).click()
except FileNotFoundError as e:
Logger().log().critical('文件没有找到%s' % e)
except UnicodeDecodeError as e:
Logger().log().critical('Unicode解码错误:%s' % e) def Find_element(self,starTime):
# 加入时间判断,避免死循环
intervalTime = 10
now = time.time()
if now - starTime > intervalTime:
return
element = self.browser.find_element_by_xpath("//ul[@id='third_nav_a']/li[3]/a/span")
ActionChains(self.browser).move_to_element(element).perform()
time.sleep(2)
element1 = self.browser.find_element_by_xpath("//div[@id='_t2043']/a[3]/span")
ActionChains(self.browser).move_to_element(element1).perform()
y = element1.is_displayed()
Logger().log().info('界面元素是否可见?%s' % y)
try:
if y:
WebDriverWait(self.browser, 10, 1).until(lambda x:x.find_element_by_xpath(
"//div[@id='_t2043']/a[3]/span")).click()
# element1.click()
else:
# 回调
self.Find_element(starTime)
except ElementNotVisibleException as e:
Logger().log().critical('鼠标事件点击失败:%s' % e) def Quit(self):
self.browser.quit() def Run(self):
self.Clear()
self.Loggin('xx', 'xx', 'xx')
self.Check()
self.Go_item()
self.Random_add_item()
self.Quit()
return self.browser if __name__ == '__main__':
Item().Run()
自动添加菜品,加入运行中遇到的异常,生成日志文件...<工作中场景...>的更多相关文章
- 工具:从一个文件夹中复制jar到另一个文件夹中
工具类:从一个文件夹中复制jar到另一个文件夹中 需要的小伙伴可以试一试,很爽哦,有时候真的很需要! 需求:当我们拿到一个maven项目时,而maven项目的jar包都是通过pom.xml文件管理的, ...
- delphi中单独编译pas生成dcu文件
delphi中单独编译pas生成dcu文件 在网上下载了一个带源码的组件,结果碰到提示说缺少xxx.dcu.一看它的目录下确实没有,那能不能生成一个呢? 当然可以! 方法是使用delphi的安装目录\ ...
- PHP中错误与异常的日志记录用法分析
原文:http://www.jb51.net/article/89548.htm ----------------------------------------------------------- ...
- log4j自动生成日志文件配置
生成文件到默认位置: #生成日志文件 #log4j.appender.systemFile=org.apache.log4j.RollingFileAppender #按天生成 log4j.appen ...
- 【转载】C#代码开发过程中如何快速比较两个文件夹中的文件的异同
在日常的使用电脑的过程中,有时候我们需要比较两个文件夹,查找出两个文件夹中不同的文件以及文件中不同的内容信息,进行内容的校对以及合并等操作.其实使用Beyond Compare软件即可轻松比较,Bey ...
- python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件
python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 python操作txt文件中 ...
- Flask log配置,实现按照日期自动生成日志文件
Flask自带了logger模块,用来方便程序员群众记录日志,这里粘贴出来的是一段代码,用来初始化日志各项配置参数,并根据日期自动生成日志文件. #log配置,实现日志自动按日期生成日志文件def m ...
- JNI中使用cl命令生成DLL文件
问题描述: 在使用JNI调用DLL时,首先需要生成DLL文件 问题解决: (1)现在使用VS2008的cl.exe程序,生成DLL文件 (1.1)cl.exe环境搭建 注: cl. ...
- springboot添加log4j日志配置log4j.xml生成日志文件
第一步:添加pom文件依赖 <!-- log4j --> <dependency> <groupId>org.springframework.boot</gr ...
随机推荐
- 安装 Samba服务
参考摘录的是博客园的文章:https://www.cnblogs.com/zhaopengcheng/p/5481048.html ubuntu系统:16.04 1. 首先用管理员权限创建一个新用户, ...
- 第二章 构建布局良好的windows程序
工具箱→菜单和工具栏 菜单栏 MenuStrip的类型 MenuItem:菜单项 TextBox:文本框 ComboBoX:组合框 Separato:分割线 前面都有ToolStrip做前缀 Appl ...
- Delphi启动数据库连接属性对话框
有时候需要客户端进行服务器连接配置,自己写配置窗体,总不如直接使用系统提供的使用方便快捷 例子一: //此例子有个坏处不管用户点了确定还是取消,均返回值 procedure TForm1.Button ...
- 003-读书笔记-企业IT架构转型之道-阿里巴巴中台战略思想与架构实战-分布式服务框架的选择
3.1.淘宝平台“服务化”历程 大约2007年,淘宝500人团队,维护一个war包,200多个功能模块. 1)项目团队协同成本高,业务响应越来越慢 2)应用复杂度超出人的认知负载. 3)错误难于隔离[ ...
- 表单中的input框点击enter到下一个input框
$(function() { $("#form1").on("keydown", "tr input", function() { //响应 ...
- cookie存值 后取值是string string字符串转对象
实现方法 // 得到 对象 格式或 json 格式的一个字符串 var str = '{"name":"张根硕","age":"1 ...
- 循环匹配出图片地址(即src属性)
<script type="text/javascript"> //思路分两步:作者(yanue). //1,匹配出图片img标签(即匹配出所有图片),过滤其他不需要的 ...
- java.lang.SecurityException: Permission Denial: writing android.support.v4.content.FileProvider uri
在使用红米手机拍摄照片时,出现闪退的情况. 调用系统相机拍摄照片,使用FileProvider.getUriForFile传入Uri时,报异常 java.lang.SecurityException: ...
- VS Code的golang开发配置 之 代码提示
之前用VS Code的时候,发现自己的代码的提示一直不好,换用JetBrain的Goland的代码提示是好了,但是比较占用资源.在网上找了一些资料,发现很多人也是遇到第三方或者自己的代码无法提示的情况 ...
- CentOS6.5 安装openssl
安装比较简单! 1.下载安装包 [root@mycentos ~]# wget http://www.openssl.org/source/openssl-1.0.2f.tar.gz 2.解压和编译 ...