Selenium Webdriver上传文件,别傻傻的分不清得3种方法

2021-01-12 14:57:16 浏览数 (1)

Selenium上传文件

在Selenium中处理文件上传可以简化人工工作,并只需使用发送键()方法即可完成。上载文件后显示一条消息,确认文件是否已成功上载。还有更多此类文件上传的自动化方法。

本教程涵盖的主题包括HTML中的文件上传,Selenium中处理文件上传的方法(其中包括以下方法:使用sendKeys,然后使用AutoIT和Robot类)。

本教程还说明了在Selenium中使用这些方法处理文件上传的代码的实现,此后,我们将看到一些示例,这些示例在Selenium的帮助下执行文件上传。

HTML文件上传

以下代码实现说明了HTML页面上的文件上传操作。HTML代码显示了如何执行上传操作,方法是先单击“选择文件”按钮浏览要上传的文件,然后单击“上传文件”选项,此后我们可以看到文件已成功上传。

上面的图片由HTML创建的页面组成,下面是该页面的HTML代码。让我们快速看一下HTML代码。

代码语言:javascript复制
<html>
<head><title>上传文件</title></head>
<body>
<form action="photo_upload.png" method="post" enctype="multipart/form-data">
<h2> 上传文件 (上传图片文件) </h2>
选择要上传的文件:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload File" name="submit">
</form></body></html>

因此,在通过单击“上传文件选项上载所需的文件时,将显示以下页面(图像)(即显示已上载的图像文件),该页面确认选择上载的文件已成功上载。

在Selenium中上传文件的方法

让我们看看一些处理文件上传的方法,以及相同的代码实现。

可以使用以下方法在Selenium中上传文件:

  1. 使用sendKeys方法
  2. 使用AutoIT工具
  3. Robot Class
#1)使用sendKeys方法

在Selenium中上传文件的最基本方法是使用sendKeys方法。它是Selenium中用于文件上传的内置功能。

语法如下:

代码语言:javascript复制
WebElement upload_file = driver.findElement(By.xpath(“ // input [@ id ='file_up']”)));
upload_file.sendKeys(“ C:/Users/Sonali/Desktop/upload.png”);

让我们了解上述技术的代码实现:

为了使用这种方法上传文件,我们首先需要检查提供文件上传的元素或按钮,然后使用sendKeys浏览保存要上传的实际文件的路径。将路径以及文件名放在sendKeys中,以便程序导航到提到的路径以获取文件。

此后,单击保存或提交按钮,该文件将被视为已上传。有时,我们还会收到一条消息,说明文件已成功上传。

使用sendKeys方法的代码实现:

代码语言:javascript复制
package SeleniumPrograms;
import java.io.IOException;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

public class FileUpload {
   public static void main(String[] args) throws IOException, InterruptedException {
   WebDriver d = new FirefoxDriver();
   d.manage().window().maximize();
   d.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
   d.get("https://www.monsterindia.com/seeker/registration"); //Testing webpage
   d.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
   JavascriptExecutor js = (JavascriptExecutor)d;
   js.executeScript("window.scrollBy(0,380)");
   Thread.sleep(3000);
   WebElement browse = d.findElement(By.xpath("//input[@id='file-upload']"));
   browse.sendKeys("C:\Users\Chait\Desktop\Files\Spencer.txt");
   System.out.println("File is Uploaded Successfully");
   }
}

因此,对于使用sendKeys选项上传文件,我们只需使用内置的sendKeys方法即可成功上传所需的文件。

这是上述代码(适用于Monster.com)的输出,在其中,使用sendKeys方法在selenium Web驱动程序中上传文件时,我们可以看到显示为“文件上传成功”的消息。

#2)使用AutoIT

AutoIT是Windows软件的免费软件和开源自动化工具。它是使用BASIC脚本计算机语言编写的,用于自动化Microsoft Windows用户界面。它模拟击键,鼠标移动和Windows控件操作的任意组合。

下载和安装AutoIT工具的步骤:

  1. 打开官网
  2. 转到自动->下载。下载最新的AutoIT。
  3. 进行AutoIT安装和设置(下一步->同意-> 32/64位选择->文件安装位置选择->完成。
  4. 有2个安装文件:a)AutoIt版本3 b)SciTE autoit 3。
  5. 安装完成后,打开AutoIT编辑器。
  6. 转到保存安装文件的位置,单击“ SciTE.exe”文件,然后将打开AutoIT编辑器。请参见下面的AutoIT编辑器屏幕截图。

AutoIT_Editor:

现在,让我们简短地了解如何使用此工具:

  • 打开AutoIT编辑器。
  • 我们需要在AutoIT编辑器中编写一个简单的代码,这是文件上载操作所必需的(要上载的文件名,将在代码中提到)。
  • 现在关闭编辑器并右键单击它,您将看到编译脚本选项。为64位计算机选择编译脚本(x64)选项,为32位计算机选择编译脚本(x86)。
  • 完成上述步骤后,将创建一个.exe文件,并且该文件将在我们的Selenium蚀代码中提及。编译后,如下图所示,创建了“ fileupload.exe”文件。现在,我们可以在Selenium Web驱动程序脚本中使用此文件。

保存的文件:

下图通过执行运行fileupload.exe文件的Selenium蚀脚本,帮助我们了解了要上传的文件form.csv。

AutoIT的优势:

  • AutoIT是一种开源工具,我们无需为此付费。
  • 小型独立可执行文件可以使用AutoIT创建。
  • 它支持轻松记录或回放脚本。
  • 我们可以使用console write命令轻松调试代码 。
  • 它可以选择创建不同的GUI并识别几乎所有基本的Windows控件。
  • 它简单易用。

AutoIT的缺点:

  • 它仅适用于Windows操作系统
  • 由于基本的编码原理知识是必须的,因此事实证明它是专业人士的绝佳工具,但对初学者而言可能有点复杂。
  • 到目前为止,AutoIT还没有Java支持。
  • 用户需要在使用不同的预定义实用程序功能时导入单独的库。

现在,让我们转到使用AutoIT的文件上传的实现代码:

在这里,我们将看到如何使用Selenium中的AutoIT处理文件上传。为此,让我们考虑OrangeHRM网站的示例。

使用AutoIT处理Selenium中的文件上传的代码实现:

代码语言:javascript复制
package SeleniumPrograms; 
import java.io.IOException;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
 
public class FileUpload {
 
  public static void main(String[] args) throws IOException, InterruptedException {
  //TODO 自动生成的方法保存
 
   WebDriver d = new FirefoxDriver();
   d.manage().window().maximize();
   d.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);    // 用于页面加载
   d.get(“https://opensource-demo.orangehrmlive.com/“);       // 测试网页
   d.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);      // 隐式等待
             
   WebElement uname = d.findElement(By.id("txtUsername"));          // 用户名......... ID
   uname.sendKeys("Admin");
     
   WebElement pwd = d.findElement(By.name("txtPassword"));    // 密码...... NAME
   pwd.sendKeys("admin123");
    
   WebElement loginb = d.findElement(By.xpath("//input[@id='btnLogin']"));
   loginb.click();                                   //登录按钮......XPATH
         
 
   WebElement pim = d.findElement(By.id("menu_pim_viewPimModule"));
    pim.click();                                            // 管理员标签-PIM
 
   WebElement config = d.findElement(By.id("menu_pim_Configuration"));
    config.click();                                  //配置选项卡
 
    WebElement data_imp = d.findElement(By.partialLinkText("Data "));
    data_imp.click();                                 //数据导入选项卡..... PARTIALLINKT
         
 
    // UPLOADING FILE USING AutoIT....
     
    WebElement browser = d.findElement(By.xpath("//input[@id='pimCsvImport_csvFile']"));   //浏览按钮
    browser.click();                                
    System.out.println(“1”);
 
 
  Runtime.getRuntime().exec("C:\Users\Chait\Desktop\autoit\fileupload.exe");
  System.out.println("2");
  Thread.sleep(3000);
 
  WebElement upload = d.findElement(By.id("btnSave"));            //上传按钮
   upload.click();
   System.out.println("3");     
  
   System.out.println("File Uploaded Successfully");           // 确认信息
             
      }
 
}

如上面的代码所示,以下行非常重要,因为它显示了AutoIT的用法:

代码语言:javascript复制
Runtime.getRuntime()。exec(“ C:\ Users \ Chait \ Desktop \ autoit \ fileupload.exe”);

这里,

  • 运行时:它允许脚本与运行脚本的环境进行交互。
  • getRuntime():用于获取与流程关联的当前运行时。
  • exec():它执行AutoIT脚本(此处为fileupload.exe)。

程序执行此行时,它将遍历fileupload.exe文件,在其中执行AutoIT代码,如下所示:

代码语言:javascript复制
ControlFocus("File Upload","","Edit1")
ControlSetText("File Upload","","Edit1","C:UsersChaitDesktopautoitdata_file.csv")
ControlClick("File Upload","","Button1")

这里,

  • ControlFocus:此方法将输入焦点设置为“文件名”文本框。
  • ControlSetText:此方法定义文件的路径。我们将在“文件名”文本框中上载的文件-跟踪其路径。
  • ControlClick:此方法用于单击文件上传器窗口的“打开”按钮。

上面代码的输出如下所示:

0 人点赞