美文网首页
selenium 学习整理(2)--selenium 上传文件

selenium 学习整理(2)--selenium 上传文件

作者: 努力学习小哥 | 来源:发表于2019-06-28 10:18 被阅读0次

    selenium 遇到上传文件的几种处理方法:

    (1) input 标签 # 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):
        # 启动Chrome浏览器
        self.driver = webdriver.Chrome()
    
    def test_uploadFileBySendKeys(self):
        url = "xxxxx"
        # 访问自定义网页
        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:
            # 捕获TimeoutException异常
            print (traceback.print_exc())
        except NoSuchElementException as e:
            # 捕获NoSuchElementException异常
            print (traceback.print_exc())
        except Exception as e:
            # 捕获其他异常
            print (traceback.print_exc())
        else:
            # 查找页面上ID属性值为“file”的文件上传框
            fileBox = self.driver.find_element_by_id("file")
            # 在文件上传框的路径框里输入要上传的文件路径“/Users/macbook/Desktop/测试图片/MDL.png”
            fileBox.send_keys("xxxxx")
            # 暂停查看上传的文件
            time.sleep(4)
            # 找到页面上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):
        # 退出IE浏览器
        self.driver.quit()
    

    (2)Windows # 键盘事件

    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):
        # 启动Chrome浏览器
        self.driver = webdriver.Chrome()
    
    def test_uploadFileByKeyboard(self):
        url = "xxxxx"
        # 访问自定义网页
        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:
            # 捕获TimeoutException异常
            print (traceback.print_exc())
        except NoSuchElementException as e:
            # 捕获NoSuchElementException异常
            print (traceback.print_exc())
        except Exception as e:
            # 捕获其他异常
            print (traceback.print_exc())
        else:
            # 将即将要上传的文件名及路径设置到剪切板中
            setText(u"xxx/xxxx")
            # 查找页面上ID属性值为“file”的文件上传框,
            # 并点击调出选择文件上传框
            self.driver.find_element_by_id("file").click()
            time.sleep(2)
            # 模拟键盘按下ctrl + v组合键
            keyDown("ctrl")
            keyDown("v")
            # 模拟键盘释放Ctrl + v组合键
            keyUp("v")
            keyUp("ctrl")
            time.sleep(1)
            # 模拟键盘按下回车键
            keyDown("enter")
            # 模拟键盘释放回车键
            keyUp("enter")
            # 暂停查看上传的文件
            time.sleep(2)
            # 找到页面上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):
        # 退出IE浏览器
        self.driver.quit()
    

    (3) Autoit实现文件上传
    可参考此文章 [https://blog.csdn.net/xqtesting/article/details/77484446]

    相关文章

      网友评论

          本文标题:selenium 学习整理(2)--selenium 上传文件

          本文链接:https://www.haomeiwen.com/subject/qhzjcctx.html