Python+selenium创建自动执行命令脚本

发表于:2020-2-13 12:14

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:WEL测试    来源:WEL测试

分享:
  Python+selenium创建自动执行命令脚本,通过该项目解决了,通过window的任务管理器,每天定时调用脚本,获取相关分析数据,用于分析数据误差,通过误差来分析埋点数据从需求到数据处理完成过程中的是否存在问题。
  以下给出功能代码,获取界面元素,把跑的sql句填写到对应的编辑区域,点击执行,执行成功下载数据。
#coding=utf8
'''
该模式功能是实现自动运行sql命令,命令执行成功后
保存成功截图并下载结果文件;运行出错,则保存错误截图;
开始运行保存,设置命令截图。
该模块初始化包含如下信息:
self.url:用来保存要访问的网站链接
self.driver:创建一个Chrome对象实例,并启动Chrome浏览器
self.driver.maximize_window():窗口最大化
self.driver.get(self.url):打开网站链接
self.driver.implicitly_wait(10):设置隐性等待时间10秒
'''
import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait  
#设置默认编码格式为utf8
import sys
reload(sys)
sys.setdefaultencoding("utf8")

class RunXQL(object):
    def __init__(self):
        self.url=""
        self.driver=webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.get(self.url)
        self.driver.implicitly_wait(10)
        self.run()
      
    def openCmd(self):
        #设置命令文件的路径,使用RunAll.py脚本时,是.//CmdFile//CMD
        #如果直接运行该脚本要更改为:..//CmdFile//CMD
        filePath=".//CmdFile//CMD"
        #打开文件
        cmd=file(filePath,"r+")
        #读取文件
        cmd=cmd.read()
        #把文件转换成string类型并解码
        cmds=str(cmd).decode("utf8")
        #根据换行符对命令文件进行拆分
        #如果不进行该项处理,在命令行结尾会莫名添加一个括号)
        cmd=cmds.split("\n")  
        #返回命令行列表
        return cmd
    
    def SetCmdImage(self):
        try:
            #获取当前时间并转换为字符串
            now=time.strftime("%Y%m%d%H%M%S")
            #设置图片格式与路径
            #如果直接运行该脚本,变成..\\SetCmdImage
            #以下涉及路径的于此处理方法一样
            fileName=".\\SetCmdImage"+"\\"+now+"xpl.png"
            #保存屏幕截图到相应路径
            self.driver.get_screenshot_as_file(fileName)
        except Exception,e:
            print e
    
    def RunErrorImage(self):
        try:
            now=time.strftime("%Y%m%d%H%M%S")
            fileName=".\\RunErrorImage"+"\\"+now+"xqlErro.png"
            self.driver.get_screenshot_as_file(fileName)
        except Exception,e:
            print e
                     
    def SuccessImage(self):
        try:
            now=time.strftime("%Y%m%d%H%M%S")
            fileName=".\\ExecResutlImage"+"\\"+now+"success.png"
            self.driver.get_screenshot_as_file(fileName)
        except Exception,e:
            print e
        
    def inputCMD(self,cmd):
        try:
            #获取输入命令行元素对象
            cmdArea=self.driver.find_element_by_class_name("ace_text-input")
            #如果元素存在
            if cmdArea:
                #把命令输入到文本区域中
                cmdArea.send_keys(cmd)
                #获取屏幕截图
                self.SetCmdImage()
            else:
                print "The element %s not exists!" %("ace_text-input")
        except Exception,e:
            print e
            
    def runCmd(self):
        try:
            #获取执行命令的元素对象
            runEle=self.driver.find_element_by_xpath("//*[@id=\"new-tab-cont\"]/div/div[1]/ul[1]/li[1]/a")
            #如果元素存在
            if runEle:
                #点击该元素运行命令
                runEle.click()
            else:
                print "The element %s not exists!" %("exec")
        except Exception,e:
            print e
            
    def clickDown(self):
        try:
            #获取下载元素对象
            download=self.driver.find_element_by_xpath("//*[@id=\"new-tab-cont\"]/div/div[3]/ul/li[1]/a[1]")
            #如果元素存在
            if download:
                #点击该元素执行下载操作
                download.click()
            else:
                print "The element %s not exists!" %("fa fa-download j-dload")
        except Exception,e:
            print e
         
    def GetResutl(self):
        try:
            try:
                #获取命令出错或执行异常,显示异常信息的元素对象
                #超过60秒如果找不到该元素,失败
                text_danger=WebDriverWait(self.driver, 60).until(lambda driver: driver.find_element_by_xpath("//*[@id=\"new-tab-cont\"]/div/div[3]/div/div[1]/pre"))
                #如果元素存在
                if text_danger:
                    #获取元素的文本信息
                    errInfro=text_danger.text
                    #获取屏幕截图
                    self.RunErrorImage()
                    print errInfro
            except Exception,e:
                pass
            try:     
                #获取成功时显示的文本信息,超过300秒元素不存在则失败
                text_success=WebDriverWait(self.driver, 300).until(lambda driver: driver.find_element_by_class_name("text-success"))     
                #如果元素存在    
                if text_success:
                    #获取屏幕截图
                    self.SuccessImage() 
                    print "sql run successs......"
                    #点击下载按钮下载运行结果文件
                    self.clickDown()
            except Exception,e:
                print e       
        finally:
            #最后关闭浏览器
            self.driver.close()
            
    def run(self):
        try:
            cmd=self.openCmd()
            self.inputCMD(cmd)
            self.runCmd()
            self.GetResutl()
            print "success......"
        except Exception,e:
            print e
        finally:
            #最后关闭浏览器
            self.driver.close()
        
            
def test():
    RunXQL()
    
if __name__=="__main__":
    test()

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号