文档章节

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

henni_719
 henni_719
发布于 2017/04/22 17:11
字数 828
阅读 6
收藏 0
#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()
完整项目源码下载链接: http://download.csdn.net/download/henni_719/9771946

© 著作权归作者所有

henni_719
粉丝 2
博文 466
码字总数 343938
作品 0
信阳
QA/测试工程师
私信 提问
Python+Selenium搭建UI自动化测试框架

本文原文来自GitHub个人主页 > Python+Selenium搭建UI自动化测试框架 Python语言是非常强大的编程语言,很多时候也拿来当脚本语言用。 Selenium是web应用测试工具,支持Java、Python等多种语...

FunGa
2015/09/06
7.8K
0
Docker + selenium + jenkins 并行跑自动化测试

背景 目标:使用docker做UI自动化测试并在Jenkins运行 调试环境:MocOS 运行环境:Linux ubuntu + docker 涉及工具:docker,selenium,unittest, jenkins 基本思路 找一个适合做自动化的doc...

呐呐丶嘿
2018/12/11
0
0
python+selenium自动化环境搭建

1、下载python安装。   https://www.python.org/downloads/release/python-351/ 根据自己的操作系统32/64 位,选择相应的版本。 安装过程我就没必要描述,我的安装目录为:C:Python35 2、进...

黄燕平
2018/06/26
0
0
分发系统、expect脚本、构建文件分发系统、批量远程执行命令

20.27 分发系统介绍 20.28 expect脚本远程登录 20.29 expect脚本远程执行命令 20.30 expect脚本传递参数 20.31 expect脚本同步文件 20.32 expect脚本指定host和要同步的文件 20.33 构建文件分...

tobej
06/19
0
0
Shell项目-分发系统-expect

[toc] 分发系统-expect 一、什么是分发系统? 如今一些比较大的企业,大都使用了负载均衡,而有时因为一些程序要更改,或者有些bug要修改,如果仅是几台server的话,很简单,把已经改好的程序...

Xavi2017
2018/04/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

北斗三号IGSO-2卫星发射成功!

6月25日,中国航天科技集团官方公众号宣布,北斗三号IGSO-2卫星发射成功! 航天科技集团表示,6月25日2点09分,我国在西昌卫星发射中心用长征三号乙运载火箭成功将北斗三号第2颗倾斜地球同步...

linuxCool
22分钟前
1
0
阿里java开发规约的Idea插件安装(英文)

Idea Plugin Prepare Project JDK: 1.7+ Gradle: 3.0+(Require JDK1.8+ for gradle) Build cd p3c-ideagradle clean buildPlugin Run plugin cd p3c-ideagradle runIde# run speci......

Airship
31分钟前
1
0
很多人转行做程序员选择web前端学习,前端简单在哪里?

不管你是工人阶层还是服务行业,是否想过转行IT,转行IT后肯定会选择一门编程语言进行深入学习,很多转行的人基础都不是太好,不是科班出身,甚至有的是专科乃至中专,前端的HTML和CSS相对其...

智云编程
44分钟前
2
0
一文读懂内网、公网和NAT

我们做弱电监控系统的时候,都避免不了要跟IP地址打交道,比如摄像头、NVR、服务器等这些设备安装好之后,就需要给它们配上IP,那这个IP地址你了解嘛?今天我们就一起来聊聊什么是内网、公网和...

老孟的Linux私房菜
49分钟前
5
0
聊聊dubbo的ExecuteLimitFilter

序 本文主要研究一下dubbo的ExecuteLimitFilter ExecuteLimitFilter dubbo-2.7.2/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/ExecuteLimitFilter.java public clas......

go4it
58分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部