欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-20 21:31:52
上传文件 Browse for a file to upload: 1、使用webdriver的send_keys方法上传文件 #!usr/bin/env python #-*- coding:utf-8 -*- """ @author: sleeping_cat... ......
<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()