WebDriver高阶API(3)

WebDriver高阶API(3)


2)模拟键盘操作,实现上传文件

#encoding=utf-8
import unittest,time
from selenium import webdriver
import traceback
import win32clipboard as w
import win32con
import win32api
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException,NoSuchElementException

#设置剪切板内容
def setText(aString):
    w.OpenClipboard()
    w.EmptyClipboard()
    w.SetClipboardData(win32con.CF_UNICODETEXT,aString)
    w.CloseClipboard()

VK_CODE = {
    "enter":0x0d,
    "ctrl":0x11,
    "a":0x41,
    "v":0x56,
    "x":0x58
}

#键盘皱键按下
def keyDown(keyName):
    win32api.keybd_event(VK_CODE[keyName],0,0,0)
#键盘键抬起
def keyUp(keyName):
    win32api.keybd_event(VK_CODE[keyName],0,win32con.KEYEVENTF_KEYUP,0)

class TestDemo(unittest.TestCase):

    def setUp(self):
        #启动浏览器
        self.driver = webdriver.Chrome(executable_path = "D:\\chromedriver")

    def test_uploadFileByKeybd(self):
        url = "http://127.0.0.1:8080/test_upload_file.html"
        #访问自定义网页
        self.driver.get(url)
        try:
            #创建一个显式等待对象
            wait = WebDriverWait(self.driver,10,0.2)
            #显式等待判断被测页面上的上传文件按钮是否处于可被单击状态
            wait.until(EC.element_to_be_clickable((By.ID,"file")))
        except TimeoutException,e:
            #捕获TimeoutException异常
            print traceback.print_exc()
        except NoSuchElementException,e:
            #捕获NoSuchElementException异常
            print traceback.print_exc()
        except Exception,e:
            #捕获其他异常
            print traceback.print_exc()
        else:
            #将即将要上传的文件名及路径设置到剪切板中
            setText(u"D:\\test\\test.txt")
            #查找页面上ID属性值为“file”的文件上传框,并单击调出选择文件上传框
            self.driver.find_element_by_id("file").click()
            time.sleep(2)
            #模拟键盘按下Ctrl+V组合键
            print VK_CODE["ctrl"]
            keyDown("ctrl")
            keyDown("v")
            # 释放Ctrl+V组合键
            keyUp("v")
            keyUp("ctrl")
            time.sleep(1)
            #模拟键盘按下回车键
            keyDown("enter")
            #模拟键盘释放回车键
            keyDown("enter")
            #暂停查看上传的文件
            time.sleep(3)
            #找到页面上ID属性值为filesubmit的文件提交按钮对象
            fileSubmitButton = self.driver.find_element_by_id("filesubmit")
            #单击提交按钮,完成文件上传操作
            fileSubmitButton.click()
            #因为文件上传需要时间,所以这里可以添加 显式等待场景
            #判断文件上传成功后,页面是否跳转到文件瞧去成功页面
            #通过EC.title_is()方法判断跳转后的页面title值是否符合
            #期望,如果匹配将继续执行后续代码
            # wait.until(EC.title_is(u"文件上传成功"))

    def tearDown(self):
        self.driver.quit()

if __name__ == "__main__":
    unittest.main()


3)使用第三方工具AutoIt上传文件
需要安装AutoIt工具 autoit-v3-setup.exe和 SciTE4AutoIt3.exe
在编辑器中输入文件上传的脚本,如下:
#include<Constants.au3>

Send("D:\\test\\test.txt")
Send("{ENTER}")
Send("{ENTER}")

并将.au3文件转换为.exe可执行文件
注:本例只针对Chrome浏览器

#encoding=utf-8
import unittest,time,traceback,os
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException,NoSuchElementException

class TestDemo(unittest.TestCase):

    def setUp(self):
        #启动浏览器
        self.driver = webdriver.Chrome(executable_path = "D:\\chromedriver")

    def test_uploadFileByAutoIt(self):
        url = "http://127.0.0.1:8080/test_upload_file.html"
        #访问自定义网页
        self.driver.get(url)
        try:
            #创建一个显式等待对象
            wait = WebDriverWait(self.driver,10,0.2)
            #显式等待判断被测试页面上的上传文件按钮是否处于可被单击状态
            wait.until(EC.element_to_be_clickable((By.ID,"file")))
        except TimeoutException,e:
            #捕获TimeoutException异常
            print traceback.print_exc()
        except NoSuchElementException,e:
            #捕获NoSuchElementException异常
            print traceback.print_exc()
        except Exception,e:
            #捕获其他异常
            print traceback.print_exc()
        else:
            #查找页面上id属性值为"file"的文件上传框,
            #并单击调出选择文件上传框
            self.driver.find_element_by_id("file").click()
            #通过Python提供的os模块的system方法执行生成的test.exe文件
            os.system("D:\\test\\test.exe")
            #由于AutoIt脚本转换后的可执行文件test.exe可能执行速度比较慢,
            #这里等待5秒,以确保test.exe脚本执行成功
            time.sleep(5)
            #找到页面上ID属性值为“filesubmit”的文件提交按钮
            fileSubmitButton = self.driver.find_element_by_id("filesubmit")
            #单击提交按钮,完成文件上传操作
            fileSubmitButton.click()
            # 因为文件上传需要时间,所以这里可以添加 显式等待场景
            # 判断文件上传成功后,页面是否跳转到文件瞧去成功页面
            # 通过EC.title_is()方法判断跳转后的页面title值是否符合
            # 期望,如果匹配将继续执行后续代码
            # wait.until(EC.title_is(u"文件上传成功"))

    def tearDown(self):
        self.driver.quit()

if __name__ == "__main__":
    unittest.main()

 

posted @ 2019-03-26 18:26  测试小子  阅读(190)  评论(0编辑  收藏  举报