使用 selenium webdriver 上传图片

Image upload with selenium webdriver

在 java 中使用 selenium 网络驱动程序。我有一个图像上传控件,我需要使用它来上传图像。我通过传递无效的图像路径尝试了 .sendKeys 方法。 我已经尝试过机器人 class,首先单击打开 Window 的按钮(windows 本机 window)但它没有在 "File Name" 中键入键面积

<fieldset class="fieldset-company_logo post-fieldSet"> 
  <label for="company_logo">Opportunity image:</label> 
  <div class="field"> 
    <div class="upload-button"> 
      <button class="button">Choose File</button> 
      <span>No file chosen</span> 
      <input class="input-text" name="company_logo" id="company_logo" placeholder="" type="file"> 
    </div> 
    <small class="description"> Max. file size: 2MB. Allowed file format: jpg, gif, png </small> 
  </div> 
</fieldset>

我找到了问题的解决方案,请查看以下详细信息:

  1. 将数据设置到剪贴板的功能,我将使用它来设置图像路径到剪贴板,稍后我将在模型上使用 window:

    public static void setClipboardData(String string) {
    
    StringSelection stringSelection = new StringSelection(string);
    
    Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null);
    
    }       
    
  2. 现在查看这些代码行

    WebElement upload_btn =  driver.findElement(By.xpath(choose_file_btn_xpath));
    
    Thread.sleep(4000);
    
    setClipboardData(selected_image_path);
    
    Actions builder  = new Actions(driver);
    
    Action myAction = builder.click(upload_btn).release().build();
    
    myAction.perform();
    
    Robot rbt = new Robot();
    rbt.delay(4000);
    rbt.keyPress(KeyEvent.VK_CONTROL);
    rbt.keyPress(KeyEvent.VK_V);
    rbt.keyRelease(KeyEvent.VK_V);
    rbt.keyRelease(KeyEvent.VK_CONTROL);
    rbt.keyPress(KeyEvent.VK_ENTER);
    rbt.keyRelease(KeyEvent.VK_ENTER);
    rbt.delay(4000);
    
    driver.findElement(By.xpath(submit_button_xpath)).click();
    

感谢您的帮助和支持。

很高兴听到您找到上传图片的方法。只是为了与您分享另一种方法。例如,如果您需要单独上传文件夹中的所有 images/files(一个或多个),您可以使用此脚本:

@Test
public void Upload() throws InterruptedException
{          
File images = new File("*path where all images are saved*");
File[] eimages = images.listFiles();
String imageList = "";
for(int i = 0; i < eimages.length; i++){
    imageList += (i != 0 ?"\n":"") + eimages[i].getAbsolutePath();
}
driver.findElement(By.id("fileupload")).sendKeys(fishList);
Thread.sleep(5000);
System.out.println("Images Uploaded");
}