selenium处理文件或图片上传弹窗的三种方式(input框,robot类,autoIT3工具)

在用selenium进行自动化测试的时候,会碰到上传弹窗的问题,例如要你上传本地文件或者本地图片,例如这种弹窗。
在这里插入图片描述
这就是本地上传弹窗。接下来我们就看看如何处理它吧。

第一种方法:sendkeys

当你要上传图片的前端代码是用input时,例如:
就可以使用这种方法。
代码实现:

     //点击上传营业执照第一种(只限于input框,直接sendkeys图片路径)
                     driver.findElement(By.xpath("/html/body/div/div/div/div/div[1]/div/form/div/div[2]/div[4]/div[2]/div[2]/div/div/div/div[1]/div")).sendKeys("C:\\Users\\jolie\\Desktop\\QQ图片2.jpg");

第二种方法:利用autoIT3工具

因为本地文件上传是利用系统自身调用的弹层,而Selenium不支持调用操作系统的操作,所以这种情况下,利用Selenium无法完成图片上传,这时,我们选择其他工具实现文件上传。

autoIT3工具介绍:
AutoIT是一个类似脚本语言的软件,利用此软件我们可以方便的实现模拟键盘、鼠标、窗口等操作,实现自动化。利用AutoIT编写合适的脚本,然后将脚本编译成可执行文件,在自动化实现时,直接调用此脚本实现文件上传。

1.首先下载autoIT3这个工具,下载地址:autoIT3下载地址
2.使用
先看看我们主要要使用的三个工具。
在这里插入图片描述
AutoIt Window Info
这个工具用来识别Windows控件,在弹出系统上传弹窗的页面上打开该工具,之后拖动Finder tool到需要识别的地方。例如上传框以及确定按钮。
在这里插入图片描述
SciTE Script Editor
获取文本框和上传按钮的元素信息后,打开SciTE Script Editor,将以下代码复制粘贴到文本区域。这段代码的用意是首先判断所传参数是否大于1个,之后调用handleUpload函数,函数是先判断进行文件上传的是什么浏览器,之后,根据上一步所采集到的文本框及上传按钮元素属性,实现文件路径的打开“上传”按钮的点击,也就是上传功能的实现。保存生成后缀为.au3的文件。

          ;first make sure the number of arguments passed into the scripts is more than 1
           If $CmdLine[0]<2 Then Exit EndIf ;if parmas num <2 ,then break
          ;$CmdLine[0] ;参数的数量
          ;$CmdLine[1] ;第一个参数 (脚本名称后面)
          ;$CmdLine[2] ;第二个参数
          ;都是从cmd传入参数
           handleUpload($CmdLine[1],$CmdLine[2])
         ;定义上传函数,有两个参数,第一个是浏览器名字,第二参数是文件路径
         Func handleUpload($browser, $uploadfile)
          Dim $title                          ;定义一个title变量
        ;根据弹窗的title来判断是什么浏览器
        If $browser="ie" Then                          ; 代表IE浏览器
              $title="选择要加载的文件"
        ElseIf $browser="chrome" Then               ; 代表谷歌浏览器
             $title="打开"
        ElseIf    $browser="firefox" Then             ; 代表火狐浏览器
              $title="文件上传"
        EndIf

        if WinWait($title,"",4) Then ;等待弹出出现,最大等待时间是4秒
               WinActivate($title)                  ;找到弹出窗口之后,激活当前窗口
               ControlSetText($title,"","Edit1",$uploadfile)   ;把文件路径放入输入框,此”Edit1“是用FinderTool获              取到的
               ControlClick($title,"","Button1")                ;点击保存或者打开或者上传按钮,此“Button1”使用FinderTool获取到的
        Else
        Return False
        EndIf
 EndFunc

Compile Script To .exe
将生成的.au3文件变异为.exe的可执行文件。
打开Compile Script To .exe,将刚刚生成的.au3文件装换成.exe文件
在这里插入图片描述
接下里应该如何在程序中使用我们生成的文件呢?
加入以下一段代码:

      //第二种办法,用autoIT3工具
     Thread.sleep(4000);
       Runtime.getRuntime().exec("D:\\image\\first.exe"+ " " + "chrome" + " " + "D:\\image\\QQ图片2.jpg" );
      //三个参数分别是脚本地址(转换之后的),浏览器,你要上传的图片,文件地址

接下里运行就可以了。

第三种方法:Robot类

虽然autoIT完全可以进行图片的上传,但是太麻烦了。因此,我们用jdk自带的Robot类来实现图片上传。
Robot类主要就是模拟键盘操作,利用复制和黏贴进行文件或者图片的上传。
代码如下:不懂的看注释
//第三种方法,用robot类控制模拟键盘操作

Thread.sleep(1000);
String path =  "D:\\image\\QQ图片2.jpg";
//图片或文件的路径

StringSelection stringSelection = new StringSelection(path);
//指定图片的路径,使用相对路径
Toolkit.getDefaultToolkit().getSystemClipboard()
        .setContents(stringSelection, null);
//把图片路径复制粘贴到剪切板

Robot robot = new Robot();
 robot.keyPress(KeyEvent.VK_ENTER);
    //按下Enter键
 robot.keyRelease(KeyEvent.VK_ENTER);
   //释放Enter键

robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
//按下Ctrl+V
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyRelease(KeyEvent.VK_V);
//释放Ctrl+V

robot.keyPress(KeyEvent.VK_ENTER);
//再次点击Enter键
robot.keyRelease(KeyEvent.VK_ENTER);
//再次释放Enter键

Thread.sleep(5000);

完成!

  • 7
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Python Selenium 可以使用 switch_to.alert() 方法来处理弹窗。具体步骤如下: 1. 使用 driver.switch_to.alert() 方法切换到弹窗。 2. 使用 text 属性获取弹窗中的文本信息。 3. 使用 accept() 方法接受弹窗,或使用 dismiss() 方法关闭弹窗。 例如,以下代码演示了如何处理一个简单的弹窗: ```python from selenium import webdriver driver = webdriver.Chrome() driver.get("http://www.example.com") # 点击按钮,触发弹窗 button = driver.find_element_by_id("button") button.click() # 切换到弹窗 alert = driver.switch_to.alert # 获取弹窗中的文本信息 text = alert.text print(text) # 接受弹窗 alert.accept() # 关闭浏览器 driver.quit() ``` ### 回答2: Python Selenium 是一个广泛使用的自动化测试工具,可以通过编写 Python 脚本来操作浏览器完成自动化测试。在测试过程中,浏览器会弹出各种弹窗,如 alert、confirm、prompt 等,这些弹窗会干扰自动化测试的正常执行。因此,处理弹窗是 Python Selenium 中一个重要的话题。 对于常见的弹窗型,Python Selenium 提供了相应的方法进行处理,下面以 alert 弹窗为例进行讲解: 首先,我们需要使用 switch_to.alert() 方法切换到 alert 弹窗: ``` alert = driver.switch_to.alert ``` 接着,我们可以使用 text 属性获取弹窗中的文本信息: ``` text = alert.text ``` 如果要在弹窗中输入文本信息,可以使用 send_keys() 方法: ``` alert.send_keys("your text") ``` 如果弹窗是 alert 型,可以使用 accept() 方法点击弹窗中的确定按钮: ``` alert.accept() ``` 如果弹窗是 confirm 型,可以使用 dismiss() 方法点击弹窗中的取消按钮,或者使用 accept() 方法点击弹窗中的确定按钮: ``` alert.dismiss() alert.accept() ``` 如果弹窗是 prompt 型,还需要先使用 send_keys() 方法输入要提交的值,然后再使用 accept() 方法提交: ``` alert.send_keys("your text") alert.accept() ``` 当然,以上方法只适用于单个弹窗的情况。如果有多个弹窗依次弹出,我们需要使用循环和 try...except...finally 语句来处理: ``` try: alert = driver.switch_to.alert alert.accept() except: # 异常处理 finally: # 记得返回原窗口 driver.switch_to.default_content() ``` 总之,通过以上方法,可以轻松地处理 Python Selenium 中的弹窗,确保自动化测试正常执行。 ### 回答3: 在使用 Python 及 Selenium 进行网页自动化测试的过程中,经常会遇到弹窗的情况,比如 JavaScript 弹出、警告等。这时,我们可以使用 Selenium 的 switch_to.alert 方法来处理弹窗。 1. 获取弹窗 可以使用 driver.switch_to.alert 来获取当前弹窗的实例。如下所示: ```python alert = driver.switch_to.alert ``` 2. 处理弹窗 通常来讲,弹窗分为警告、确认和提示三种型。下面我们介绍一下它们的处理方式。 2.1 警告 警告通常用于指示用户一些错误操作,我们只需要点击确认按钮即可关闭它。如下所示: ```python alert = driver.switch_to.alert alert.accept() ``` 2.2 确认 确认通常会让用户做出选择,例如确定或取消某些操作。我们可以使用 confirm() 方法来确认或取消操作。如下所示: ```python alert = driver.switch_to.alert alert.accept() # 确认 alert.dismiss() # 取消 ``` 2.3 提示 提示常用于接收用户输入的信息,我们可以使用 send_keys() 方法向其输入信息,然后点击确认按钮。如下所示: ```python alert = driver.switch_to.alert alert.send_keys("Hello, World!") # 向输入输入信息 alert.accept() # 点击确认按钮 ``` 需要注意的是,有些情况下输入可能被禁用,此时我们就无法向其输入信息了。 3. 关闭弹窗处理弹窗后,我们需要将焦点重新切换回主窗口。如下所示: ```python driver.switch_to.default_content() ``` 如果我们没有处理弹窗并且需要关闭弹窗,也可以使用下面的代码: ```python driver.switch_to.alert.dismiss() ``` 通过上述介绍,相信大家已经掌握了使用 Python 及 Selenium 处理弹窗的方法。需要注意的是,由于不同的弹窗处理方式不同,因此在实际应用中需要根据具体情况进行处理

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值