码迷,mamicode.com
首页 > Web开发 > 详细

无人工干预地自动上传附件

时间:2018-01-12 21:16:16      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:box   txt   selenium   映射   expected   case   http   一个   tde   

<html>
<head>
    <title>上传文件</title>
    <meta http-equiv = "Content-Type" content = "text/html; charset = utf-8">
</head>
<body>
    <form enctype = "multipart/form-data" action = "parse_file.jsp" method="post">
        <p>Browse for a file to upload:</p>
        <input id = "file" name="file" typr="file"></input>
        <br/><br/>
        <input type="submit" id="filesubmit" value="SUBMIT"></input>
    </form>
</body>
</html>

1、使用webdriver的send_keys方法上传文件

#!usr/bin/env python  
#-*- coding:utf-8 -*-  
""" 
@author:   sleeping_cat
@Contact : zwy24zwy@163.com 
""" 
#无人工干预地自动上传附件
#使用webdriver的send_keys方法上传文件

from selenium import webdriver
import unittest
import time
import traceback
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()

    def test_uploadFileBySendKeys(self):
        url = "e:\\uploadFile.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 as e:
            print(traceback.print_exc())
        except NoSuchElementException as e:
            print(traceback.print_exc())
        except Exception as e:
            print(traceback.print_exc())
        else:
            fileBox = self.driver.find_element_by_id(file)
            fileBox.send_keys(c:\\test.txt)#在文件上传框的路径框里输入要上传的文件路径C://test.txt
            time.sleep(3)
            fileSubmitButton = self.driver.find_element_by_id(filesubmit)
            fileSubmitButton.click()

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

if __name__ == __main__:
    unittest.main()

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

#!usr/bin/env python  
#-*- coding:utf-8 -*-  
""" 
@author:   sleeping_cat
@Contact : zwy24zwy@163.com 
""" 
#无人工干预地自动上传附件
#模拟键盘操作,实现上传文件

from selenium import webdriver
import unittest
import time
import traceback
import win32clipboard as w
import win32api
import win32con
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,
    V:0x56}

#键盘键按下
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()

    def test_uploadFileByKeyboard(self):
        url = e://uploadFile.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 as e:
            print(traceback.print_exc())
        except NoSuchElementException as e:
            print(traceback.print_exc())
        except Exception as e:
            print(traceback.print_exc())
        else:
            setText(c:\\test.txt)#将即将要上传的文件名及路径设置到剪贴板中
            self.driver.find_element_by_id(file).click()
            time.sleep(3)
            #模拟键盘按下Ctrl+V
            keyDown(Ctrl)
            keyDown(V)
            #模拟键盘释放Ctrl+V
            keyUp(V)
            keyUp(Ctrl)
            time.sleep(1)
            keyDown(enter)
            keyUp(enter)
            time.sleep(2)
            fileSubmitButton = self.driver.find_element_by_id(filesubmit)
            time.sleep(2)
            fileSubmitButton.click()
    def tearDown(self):
        self.driver.quit()

if __name__ == __main__:
    unittest.main()

3、使用第三方工具AutoIt上传文件

#!usr/bin/env python  
#-*- coding:utf-8 -*-  
""" 
@author:   sleeping_cat
@Contact : zwy24zwy@163.com 
""" 
#无人工干预地自动上传附件
#使用第三方工具AutoIt上传文件

from selenium import webdriver
import unittest,time,os,traceback
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()

    def test_uploadFileByAutoIt(self):
        url = e:\\uploadFile.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 as e:
            print(traceback.print_exc())
        except NoSuchElementException as e:
            print(traceback.print_exc())
        except Exception as e:
            print(traceback.print_exc())
        else:
            self.driver.find_element_by_id(file).click()
            os.system(d:\\iDownload\\test.exe)#通过Python提供的os模块的system方法执行生成的test.exe文件
            time.sleep(3)
            fileSubmitButton = self.driver.find_element_by_id(filesubmit)
            fileSubmitButton.click()
            wait.until(EC.title_is(文件上传成功))
    def tearDown(self):
        self.driver.quit()

if __name__ == __main__:
    unittest.main()

无人工干预地自动上传附件

标签:box   txt   selenium   映射   expected   case   http   一个   tde   

原文地址:https://www.cnblogs.com/sleeping-cat/p/8277568.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!