自动添加菜品,加入运行中遇到的异常,生成日志文件...<工作中场景...>
"""
很弱智的小脚本,记录下。也许以后看到会笑,因为太幼稚或者证明曾经也努力过。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 ...
随机推荐
- mysql命令行各个参数解释
mysql命令行各个参数解释 http://blog.51yip.com/mysql/1056.html Usage: mysql [OPTIONS] [database] //命令方式 -?, ...
- Sql server 2016 Always On 搭建Windows集群配置
.安装WSFC群集组件 1)打开服务器管理器,选择“功能”,在右边窗口中点击“添加功能”. 2)在添加功能向导中,勾选“故障转移群集”,点击“下一步”. 3)在“确认安装选择”页面中,点击“安装”,进 ...
- String扩展 让你在PadLeft和PadRight时不再受单双字节问题困扰
/// <summary> /// 按单字节字符串向左填充长度 /// </summary> /// <param name="input">& ...
- IE8.0如何关闭启用内存保护帮助减少联机攻击?
默认情况下,该选项卡是灰色的(表示用户不能直接修改),win7电脑可以通过“以管理员身份”运行 IE 来放开该功能,但个别电脑即便用这种方法仍无法解决,此时,您可以试试如下方法: 1.在“运行”框中输 ...
- 学习Shell(二)变量
如何给shell脚本传入参数 1.执行“vi test.sh”创建一个新的shell脚本. vi test.sh 2.脚本test.sh的内容如下: #!/bin/sh name=$ echo &qu ...
- Snmp学习总结(一)——Snmp的基本概念
一.SNMP简单概述 1.1.什么是Snmp SNMP是英文"Simple Network Management Protocol"的缩写,中文意思是"简单网络管理协议& ...
- poj3259: Wormholes(BF模板题)
http://poj.org/problem?id=3259 Description While exploring his many farms, Farmer John has discovere ...
- synchronized的简单用法
synchronized 锁定要操作的对象: emp: synchronized(要锁定的对象){ //要做的动作 }
- Mybatis中映射器实现方式总结
一种是通过XML文件方式(由一个java接口和一个XML文件构成) RoleMapper rm = session.getMapper(RoleMapper.class); List<Role& ...
- iText C# 合并PDF文件流,以及A5变A4时内容默认放在最底下的问题的解决方法;ASP.NET 实现Base64文件流下载PDF
/// <summary> 合併PDF檔(集合) </summary> /// <param name="files">欲合併PDF檔之集合(一 ...