Upload File trong Selenium Java

Xử lý upload file trong Selenium Java (Handle Upload File in Selenium Java)

Có 2 cách upload file An thấy nó dễ dàng mà hiệu quả cho nhiều case upload là: dùng sendKeys của Selenium và dùng cách copy paste link file từ clipboard vào Local form hiện lên từ Computer với Robot class.

Ok mình sẽ đi từng cách nhé !!

1. Upload file với sendKeys trong Selenium

Cách này đơn giản chỉ là sendKeys một link file tuyệt đối từ local máy là xong

@Test
public void testUploadFile1() throws InterruptedException {
  driver.get("https://www.file.io/");

  Thread.sleep(2000);

  By divFileUpload = By.xpath("//div[@class='actions']");
  By inputFileUpload = By.xpath("//div[@class='actions']/input");

  driver.findElement(inputFileUpload).sendKeys(System.getProperty("user.dir") + "/src/test/resources/testdatafile/DOCX_File_01.docx");

  Thread.sleep(4000);
}


Nó chỉ đơn giản vậy thôi. Chú ý cái System.getProperty("user.dir") nghĩa là nó lấy từ mục gốc của máy tính (C:/, D:/, ...) tới mục của source code mình đang mở và sau đó nối vào cái thư mục nguồn src trở về sau.

Upload File trong Selenium Java | Anh Tester


2. Upload file với Robot class của Java


Ý tưởng:

- Click button mở form chọn file từ máy tính
- Copy link file đó vào clipboard
- Dán giá trị từ clipboard đó (Ctrl + V)
- Nhấn phím Enter

Ok vậy là xong rồi. Thử đoạn code này nào.

@Test
public void testUploadFile2() throws InterruptedException {
  driver.get("https://files.fm/");

  Thread.sleep(2000);

  By textOnPage = By.xpath("//div[@id='file_select_dragndrop_text']");
  By divFileUpload = By.xpath("//div[@id='uploadifive-file_upload']");
  By inputFileUpload = By.xpath("//div[@id='file_select_button']//input[@id='file_upload']");

  String filePath = "C:\\Users\\Admin\\Pictures\\Selenium icon.png";

  //Click để mở form upload
  driver.findElement(divFileUpload).click();
  Thread.sleep(3);

  // Khởi tạo Robot class
  Robot rb = null;
  try {
    rb = new Robot();
  } catch (AWTException e) {
    e.printStackTrace();
  }

  // Copy File path vào Clipboard
  StringSelection str = new StringSelection(filePath);
  Toolkit.getDefaultToolkit().getSystemClipboard().setContents(str, null);

  Thread.sleep(1000);

  // Nhấn Control+V để dán
  rb.keyPress(KeyEvent.VK_CONTROL);
  rb.keyPress(KeyEvent.VK_V);

  // Xác nhận Control V trên
  rb.keyRelease(KeyEvent.VK_CONTROL);
  rb.keyRelease(KeyEvent.VK_V);

  Thread.sleep(1000);

  // Nhấn Enter
  rb.keyPress(KeyEvent.VK_ENTER);
  rb.keyRelease(KeyEvent.VK_ENTER);

  Thread.sleep(4000);
}


Upload File trong Selenium Java | Anh Tester

Từ 2 hàm trên thì các bạn viết 2 hàm chung cho nó rồi truyền vào ElementFile Path là đẹp hơn đó.

Ok rồi. Có gì chưa hiểu hay chưa làm được thì liên hệ An trong nhóm nhé !!

  • Anh Tester

    Đường dẫu khó chân vẫn cần bước đi
    Đời dẫu khổ tâm vẫn cần nghĩ thấu

A PHP Error was encountered

Severity: Notice

Message: Undefined variable: new

Filename: post/post_detail.php

Line Number: 378

Backtrace:

File: /home/anhtest2/public_html/application/views/frontend/post/post_detail.php
Line: 378
Function: _error_handler

File: /home/anhtest2/public_html/application/views/frontend/layout/layout_view.php
Line: 306
Function: view

File: /home/anhtest2/public_html/application/core/MY_Controller.php
Line: 34
Function: view

File: /home/anhtest2/public_html/application/controllers/frontend/Post.php
Line: 59
Function: render

File: /home/anhtest2/public_html/index.php
Line: 317
Function: require_once

A PHP Error was encountered

Severity: Notice

Message: Trying to get property of non-object

Filename: post/post_detail.php

Line Number: 378

Backtrace:

File: /home/anhtest2/public_html/application/views/frontend/post/post_detail.php
Line: 378
Function: _error_handler

File: /home/anhtest2/public_html/application/views/frontend/layout/layout_view.php
Line: 306
Function: view

File: /home/anhtest2/public_html/application/core/MY_Controller.php
Line: 34
Function: view

File: /home/anhtest2/public_html/application/controllers/frontend/Post.php
Line: 59
Function: render

File: /home/anhtest2/public_html/index.php
Line: 317
Function: require_once

https://anhtester.com//blog/selenium-java/" data-width="100%" data-numposts="4">