Showing posts with label java. Show all posts
Showing posts with label java. Show all posts

First code cucumber and Java

Hi các bạn!

Nếu ai đã đi theo BDD (Behavior Driven Development) - phát triển theo hướng hành vi thì cũng không lạ lẫm gì với Cucumber.
Hôm nay chúng ta sẽ học cách cài đặt, sử dụng cũng như viết những dòng code đầu tiên với cucumber - First code cucumber and Java
Để có thể áp dụng thành công ví dụ này, điều kiện trước tiên là cần có 1 IDE để code java (eclipse hay Idea) và máy tính đã cài sẵn JDK, tham khảo tại bài viết sau nếu các bạn chưa cài đầy đủ.
Bài hướng dẫn này tôi dùng Eclipse vì nó khá phổ biến với giới lập trình java
Nội dung bài viết như sau:
  1. Cài plugin Cucumber cho Eclipse
  2. Tạo project với Maven
  3. Tạo file feature chứa các hành vi của người dùng

Cài đặt cucumber cho eclipse:

Từ menu Help -> Eclipse Marketplace. Sau đó tìm kiếm với từ khoá cucumber và cài đặt - nhớ restart Eclipse để hoàn tất quá trình cài


> Tạo Project với Maven

Tiếp theo chúng ta sẽ tạo 1 project Maven từ menu File của eclipse như sau
File -> New -> Other


chọn Maven Project -> Next



Tiếp đó ta làm theo các bước như trong ảnh


  • Group ID thì thường hay điền kiểu tên miền như vậy
  • Artifact ID là tên của project
  • Version thì mặc định cũng đc
Tại project vừa tạo, click đúp vào file POM.XML và chọn tab pom.xml như trong ảnh, thêm đoạn code sau vào trước dòng </project>



> Định nghĩa file Feature

Tại thư mục src/test/resources, tại 1 file có định dạng demo.feature như sau:


Feature: Demo feature

  Scenario: Finding some cheese
    Given I am on the Google search page
    When I search for "Cheese"
    Then the page title should start with "cheese"
Sau đó thêm file feature , rồi chuột phải vào file để tự tạo ra đoạn code có các phương thức theo các step đã được định nghĩa sẵn

Tiếp đó thì viết code cho các phương thức đó như sau:

package democucumberr;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;

import cucumber.api.java.After;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;

public class Demo {
 WebDriver driver = new FirefoxDriver();

 @Given("I am on the Google search page")
 public void i_am_on_the_Google_search_page() {
  driver.get("https:\\www.google.com");
 }

 @When("I search for {string}")
 public void i_search_for(String string) {
  WebElement element = driver.findElement(By.name("q"));
  element.sendKeys(string);
  element.submit();
 }

 @Then("the page title should start with {string}")
 public void the_page_title_should_start_with(String string) {
  new WebDriverWait(driver, 10L).until(new ExpectedCondition<Boolean>() {
   public Boolean apply(WebDriver d) {
    return d.getTitle().toLowerCase().startsWith("cheese");
   }
  });
 }

 @After()
 public void closeBrowser() {
  driver.quit();
 }
}
Tiếp tục quay lại file feature, chạy với Cucumber để xem kết quả


Muốn chạy với Junit thì cần tạo ra 1 class mới như sau

package democucumberr;

import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;

@RunWith(Cucumber.class)
@CucumberOptions(features = "C:\\Users\\hainv\\My Documents\\LiClipse Workspace\\democucumberr\\src\\test", plugin = {
  "pretty", "html:target/cucumber-html-report" }, tags = {})
public class Runner {

}


sau đó chạy file Runner với Junit để có kết quả ( chuột phải vào khung soạn thảo code của Runner.java, chọn Run As -> Junit)
Các bạn có thể tải project demo tại đây để em chi tiết
Hẹn gặp các bạn ở bài tiếp theo

Get all values dropdown selenium - lấy các giá trị của dropdown

Nhân dịp tối qua support một em về việc get values dropdown dùng selenium và java nên hôm nay mình sẽ note lại tips này vào đây.
Có thể các bạn đã từng đọc qua các bài viết kiểu này ở đâu đó, nhưng hôm nay dropdown của chúng ta không phải là 1 dropdown truyền thống.

Mục tiêu của tips này là chúng ta học được cách lấy xpath cho các element động và cách dùng 1 hàm theo kiểu OOP (thay vì viết chung vào thì tách thành class riêng cho tiện quản lý)

  1. trước tiên chúng ta hãy vào link sau https://www.sytner.co.uk/car-search/search/
  2. chúng ta sẽ thử lấy tất cả các giá trị trong dropdown này

chúng ta bắt đầu thôi. Tại vị trí dropdown đó, chúng ta chuột phải để view code của DOM hoặc dùng tổ hợp phím tắt Ctrl + Shift + C

Chúng ta sẽ xác định được vùng mà chứa nguyên cái khung dropdown như sau


Tiếp theo, chúng ta muốn lấy từng values trong dropdown, thì chúng ta để ý thấy là tất cả đều có chung định dạng <label for="make-xxx">
=> chúng ta sẽ căn cứ vào đây để lấy các element này.
Chúng ta sẽ dùng xpath với cú pháp như sau //XXX[start-with(...)]
trong đó:
  • XXX là tên thẻ, chúng ta có thể dùng div, input... Trong ví dụ này thì XXX là label
  • start-with :là các định dạng chung mà chúng có cùng nhau

=> ta sẽ dùng xpath sau: //label[starts-with(@for,'make-')]//span[@class='label']

ok, vậy cơ bản đã được giải quyết rồi. 
Tư tưởng là ta sẽ dùng 1 list để bắt các WebElement này lại, dùng vòng for để với mỗi 1 element thì sẽ getText() của phần tử đó rồi nhét vào 1 mảng (sau này thao tác với mảng sẽ dễ hơn)
Test scenario như sau:
1. vào trang web
2. click vào dropdown để show lên
3. bắt các element lại và lấy text của chúng

chúng ta viết 1 class Hai1 chứa phương thức lấy giá trị của dropdown

import java.util.ArrayList;


import java.util.List;


import org.openqa.selenium.By;


import org.openqa.selenium.WebDriver;


import org.openqa.selenium.WebElement;



public class Hai1 {


 public List<String> getAllValue(WebDriver driver, String locator) {


// dùng List để chứa các element này lại
  List<WebElement> elements = driver.findElements(By.xpath(locator));


  // Khai báo 1 mảng để chứa các value


  List<String> value = new ArrayList<String>();


  // với mỗi 1 element thì sẽ lấy text của nó


  for (WebElement elm : elements) {


   // sau khi lấy xong thì add luôn vào mảng mới vừa khai báo


   value.add(elm.getText());


   // System.out.println(elm.getText());


  }


  // trả về mảng chứa text 


  return value;


 }


}

Tiếp theo chúng ta viết class Hai2 là class chính

import org.testng.annotations.Test;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.chrome.ChromeDriver;


public class Hai2 {
      // gọi lại class Hai1
 Hai1 hai1 = new Hai1();
        // đặt biến để truyền vào phương thức getAllValue

 private String locator = "//label[starts-with(@for,'make-')]//span[@class=\"label\"]";



 @Test

 public void demo() {

  WebDriver driver = new ChromeDriver();

  driver.get("https://www.sytner.co.uk/car-search/search/");
             // thêm dòng này cho max size của trình duyệt để bắt các element được chính xác nhất

  driver.manage().window().maximize();

  driver.findElement(By.cssSelector(".filter-inset [data-require-container=\"Single\"]:nth-of-type(1)")).click();

  //in ra mảng chứa các giá trị của dropdown
              System.out.println(hai1.getAllValue(driver, locator));

  driver.close();

 }
Chúng ta có kết quả như sau (nhìn hơi ghê tý) :D


Vậy là kết thúc tips get all values dropdown selenium thì chúng ta học được cách lấy xpath động của 1 element.
Cảm ơn các bạn, hẹn gặp lại trong bài viết sắp tới.
Note: vui lòng ghi rõ nguồn khi coppy 😃

First Android Test with appium and java

Chào các bạn!
Trong bài trước, chúng ta đã cài android sdk. Bài này chúng ta sẽ làm ví dụ đơn giản để test app cho android với appium và java qua các bước cơ bản sau:

1. Cài Appium 

Tải tại http://appium.io và chạy nó lên, nhấn Start Server. Ở chỗ này, hãy chú ý Port 4723. bạn có thể sửa port tùy ý muốn nhưng mình nghĩ nên để mặc định.

2. Cài 1 máy ảo android

Tải và cài 1 máy ảo android tùy chọn, có thể là BlueStacks hoặc Genymotion, rồi chạy máy ảo đó lên

3. Tạo 1 project Maven mới

Sau khi tạo project Maven mới, hãy thêm các dependency sau: Ở đây mình dùng IntelliJ IDEA

<!-- https://mvnrepository.com/artifact/io.appium/java-client -->
<dependency>
    <groupId>io.appium</groupId>
    <artifactId>java-client</artifactId>
    <version>4.1.2</version>
</dependency>


<!-- https://mvnrepository.com/artifact/org.testng/testng --><dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>6.11</version>
    <scope>test</scope>
</dependency>

4. Viết những dòng code đầu tiên

Đoạn  code sau đây sẽ mở ứng dụng calculator mặc định của android lên, và làm phép tính đơn giản


public class haibgit {

    AndroidDriver driver;

    @BeforeClass
    public void Setup() throws MalformedURLException {

        DesiredCapabilities cap = new DesiredCapabilities();
        cap.setCapability("platformName", "ANDROID");
        cap.setCapability("deviceName", "192.168.210.101:5555");
        cap.setCapability("appPackage", "com.android.calculator2");
        cap.setCapability("appActivity","com.android.calculator2.Calculator");
        //cap.setCapability("avd", "Test");

        driver = new AndroidDriver(new URL(
                "http://localhost:4723/wd/hub"), cap);
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

    }

    @Test
    public void SimpleTest() {
        driver.findElementById("com.android.calculator2:id/digit_9").click();
        driver.findElementById("com.android.calculator2:id/op_add").click();
        driver.findElementById("com.android.calculator2:id/digit_6").click();
        Assert.assertEquals("15", driver.findElementById("com.android.calculator2:id/result").getText());
    }
}
5. Giải thích code:

 Sau đây chúng ta sẽ xem những dòng code cần thiết
  • cap.setCapability("deviceName", "192.168.210.101:5555"); dòng này, đoạn IP phía sau là tên của máy ảo, lấy tên máy ảo bằng cách nào? Lấy bằng cách sử dụng lệnh adb devices  
 
  • Lấy appPackage và appActivity của app: Trước tiên cần mở app trên máy ảo, sau đó qua cmd, chạy lệnh adb shell , rồi chạy tiếp dumpsys window windows | grep -E 'mCurrentFocus'


    Chỗ gạch chân đỏ tương ứng với appPackage và appActivity của app
  • driver.findElementById("com.android.calculator2:id/digit_9").click(); 
 Để xác định được các ID của element, thì cần :
1. mở app calculator của android lên,
2. sau đó chạy file uiautomatorviewer.bat tại F:\Anroid_SDK\tools\bin (đường dẫn này là nơi mà bạn để Android SDK), nhấn vào icon như ảnh dưới


Click vào 1 phần tử mà bạn muốn lấy ID của nó


Kết quả chạy code, cùng tận hưởng cảm giác tuyệt vời này :D


Vậy là chúng ta đã viết đoạn code đầu tiên để test app cho android , sử dụng appium + java.
Hẹn gặp các bạn bài tiếp theo.

How to install android sdk without android studio

Như các bạn đã biết, hiện tại trang chủ android không còn cách hướng dẫn cài android sdk 1 cách đầy đủ nữa, vì đã phát triển qua nhiều thế hệ, sdk được tích hợp sâu vào android studio nên cài android sdk khó khăn hơn.
Bài viết này chúng ta sẽ tìm cách cài Android SDK để có thể sử dụng 1 số tool của nó để phục vụ việc auto test app bằng Appium
Phần 1: cài Android SDK
Trước tiên, chúng ta cần cài JDK vào máy tính của mình, xem cách cài tại bài này
Tiếp theo, tải và cài đặt Android SDK tại đây (bản này hơi cũ 1 xíu, nhưng không sao). chúng ta có thể để nó cài mặc định, hoặc tùy chọn vào 1 ổ đĩa khác (cách này mình khuyên dùng, vì sau này cài lại win thì vẫn còn)


Sau khi cài xong thì chạy nó lên, nó đã tự tích sẵn cho chúng ta vài cái như sau:

Ở ảnh này, nó đã tự chọn sẵn cần update như :
  • Android SDK tools, 
  • Android SDK Platform-tools 
  •  Android SDK Build-tools

Ở ảnh này, nó cũng tự chịn giúp chúng ta, nhưng chúng ta chỉ cần SDK Platform của 1 phiên bản android bất kỳ, ví dụ Android 6 hay 7 hoặc 8 gì đó. Sau đó chọn cài đặt các packge như trong ảnh. 
Tiếp theo thì chờ nó tải về và tự giải nén.
Tại sao chỉ cần SDK Platform thôi? vì chúng ta không cần tạo máy ảo = chính android SDK nên không cần mấy cái còn lại, nếu mà tạo máy ảo bằng chính android SDK thì sẽ cần cài.
Trong các bài hướng dẫn tiếp theo về Appium, mình sẽ dùng máy ảo BlueStask để chạy code.
Phần 2: cài Path cho Android SDK
Việc add Path để làm gì?
Để mỗi khi cần gõ lệnh adb, thì không phải vào tận thư mục gốc mà chạy nó, chỉ cần mở cmd ở bất cứ đâu, cứ gõ adb là ok :D
Các bạn xem hướng dẫn cài Path ở bài viết này, và chúng ta sẽ thêm dòng này vào Path:
E:\AndroidSDK\tools;E:\AndroidSDK\platform-tools
Trong đó: E:\AndroidSDK là nơi tôi cài đặt Android SDK ở phần 1
Để kiểm tra xem việc add path đã đúng chưa, hãy mở cmd và gõ adb 

Vậy là qua bài viết này, chúng ta đã biết cài android SDK 1 cách đơn giản. Thực ra mấy năm trước, cài cũng đơn giản lắm, nhưng hiện nay google nó dần tích hợp sdk vào trong android studio để tiện lợi cho việc phát triển phần mềm trên android, nhưng chúng ta thì chỉ cần sdk là đủ, còn việc dùng IDE nào để viết code auto test cho android, thì là sở thích mỗi người, có thể là eclipse, intellij IDEA...
Bài sau chúng ta sẽ cài Appium và viết những dòng code đầu tiên nhé.

Read Data from Excel File in Selenium Webdriver - Lấy dữ liệu từ excel với selenium


Chào các bạn, chúng ta lại gặp lại nhau trong bài viết đọc dữ liệu từ file excel.
Có thể các bạn đã nghe qua là dùng các thư viện như JXL hoặc Apache POI, nhưng trong bài này, chúng ta sẽ làm với 1 thư viện khác, mình thấy cũng khá hay , đó chính là Fillo, trang chủ và hướng dẫn của nó tại đây
Nhìn qua hướng dẫn, có thể thấy cách dùng câu lệnh select như trong SQL vậy :D
OK, bài này mình sẽ sử dụng file excle định dạng xls, với dữ liệu như trên:

TestCase của bài này là login với lần lượt name và pass tương ứng từng dòng trong excel
sẽ có 4 trường hợp xảy ra như trong data.

Để có name và pass hợp lệ thì các bạn đăng ký ở đây nhé, nhập email bất kỳ, sau đó copy lại name và pass. Dùng được trong vòng 20 ngày kể từ ngày đăng ký :)

Đầu tiên, các bạn tải thư viện của Fillo về , tiếp đó add chúng vào Build Path của project java.
Tất nhiên, cần add cả thư viện của selenium nữa chứ :D

OK, viết code thôi. Tư tưởng của mình là dùng vòng While để add các data của từng cột vào trong 1 mảng. Sau đó dùng vòng For để chạy từ phần tử đầu tiên, với mỗi phần tử đó - tức là name và pass tương ứng, thì chính là dữ liệu để login.
Sau đó so sánh title mong muốn với title hiện tại , cũng như so sánh lỗi trả về khi nhập sai name và pass.


package ReadEx;



import java.util.ArrayList;

import java.util.List;

import java.util.concurrent.TimeUnit;



import org.openqa.selenium.Alert;

import org.openqa.selenium.By;

import org.openqa.selenium.NoAlertPresentException;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.chrome.ChromeDriver;



import com.codoid.products.exception.FilloException;

import com.codoid.products.fillo.Connection;

import com.codoid.products.fillo.Fillo;

import com.codoid.products.fillo.Recordset;



public class Test {

 static WebDriver driver;



 public static void main(String[] args) throws FilloException {

  String uName, uPass;

  String actualTitle, actualBoxtitle;



  // output mong muốn

  String EXPECT_TITLE = "Guru99 Bank Manager HomePage";

  String EXPECT_ERROR = "User or Password is not valid";

  String tc = "Test case số";



  Fillo fillo = new Fillo();

  Connection conn = fillo.getConnection("testData.xls");

  String query = "Select * from Data";

  Recordset record = conn.executeQuery(query);



  List<String> name = new ArrayList<>();

  List<String> pass = new ArrayList<>();

  // thêm name và pass vào mảng

  while (record.next()) {

   name.add(record.getField("username"));

   pass.add(record.getField("password"));

  }

  // mỗi vị trí i, lấy name và pass ở 2 cột tương ứng

  for (int i = 0; i < name.size(); i++) {

   uName = name.get(i);

   uPass = pass.get(i);



   setup();



   driver.findElement(By.name("uid")).clear();

   driver.findElement(By.name("uid")).sendKeys(uName);



   driver.findElement(By.name("password")).clear();

   driver.findElement(By.name("password")).sendKeys(uPass);



   driver.findElement(By.name("btnLogin")).click();

   try {



    Alert alt = driver.switchTo().alert();

    actualBoxtitle = alt.getText(); // lấy text của Alert

    alt.accept();

    // So sánh lỗi thực tế với lỗi mong đợi

    if (actualBoxtitle.contains(EXPECT_ERROR)) {

     System.out.println(tc + "[" + i + "]: Passed");

    } else {

     System.out.println(tc + "[" + i + "]: Failed");

    }

   } catch (NoAlertPresentException Ex) {

    actualTitle = driver.getTitle();

    // So sánh title thực tế với title mong đợi

    if (actualTitle.contains(EXPECT_TITLE)) {

     System.out.println(tc + "[" + i + "]: Login thành công");

    } else {

     System.out.println(tc + "[" + i + "]: Login lỗi");

    }



   }

   driver.close();

  }

  // đóng kết nối

  record.close();

  conn.close();

 }



 private static void setup() {

  driver = new ChromeDriver();

  driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);

  driver.get("http://www.demo.guru99.com/V4/");



 }



}

Hãy để ý trong code, những thành phần quan trọng:
File excel hãy copy vào thư mục gốc của Project
testData.xls : là tên và định dạng file excel ( excel có thể có đuôi xls, có thể có xlsx)
Select * from Data: Data là tên sheet mà chứa nội dung ta cần lấy (xem lại ảnh đầu tiên của bài)


Vậy là các bạn đã làm quen với việc đọc dữ liệu excel với selenium để viết code.
Các bạn có thể xem trên trang chủ của Fillo, để có thể biết thêm nhiều cách viết câu truy vấn với các điều kiện như dùng where...
Hẹn gặp các bạn ở bài viết tiếp theo :)

Bài 3 - Kiểm tra xem coupon giảm giá có hoạt động đúng không?

Hôm nay chúng ta sẽ tiếp tục viết testcase tiếp theo.
Bài này chúng ta sẽ kiểm tra xem coupon có hoạt động đúng như mong hay không, trong trường hợp này là 5%.

Hướng giải quyết vấn đề của mình như sau:
vào trang detail sản phẩm, sau đó mua hàng-> nhập mã giảm giá -> lấy số tiền cụ thể được giảm -> so sánh với số tiền thực tế(cái này tự tính).

package demo_thuchanh;


import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Assert;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

public class TestCase1 {
 private WebDriver driver;
   private String url; 
   
 @BeforeTest
 public void setUp() throws Exception {
  System.setProperty("webdriver.chrome.driver","C:\\chrome\\chromedriver.exe");
     driver = new ChromeDriver();
     url = "http://live.guru99.com/";
     driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
     
   }
   
 @Test 
   public void TestCase() throws Exception {
  driver.get(url); 
     
     // 2. Click Mobile menu
     driver.findElement(By.linkText("MOBILE")).click(); 
  // 3. Click vào sản phẩm
     driver.findElement(By.id("product-collection-image-2")).click();
     // 4. thêm sp vào giỏ hàng
     driver.findElement(By.className("add-to-cart-buttons")).click();
     driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
     // 5. áp dụng mã giảm giá
     driver.findElement(By.id("coupon_code")).sendKeys("GURU50");
     driver.findElement(By.cssSelector("[title=\"Apply\"]")).click();
     // 6. lấy số tiền giảm giá (nó hiện là -$25.00) nên sẽ phải chuyển nó qua StringBuilder và cắt vị trí 0 tới 2-> sẽ thành 25.00, 
     //sau đó cắt tiếp từ vị trí 2-5> sẽ được 25
     String giamgia=driver.findElement(By.xpath("//*[@id=\"shopping-cart-totals-table\"]/tbody/tr[2]/td[2]")).getText();
     StringBuilder str=new StringBuilder(giamgia);
     str.delete(0, 2);
     str.delete(2, 5);
     // lấy giá 5% để so sánh với giá trên xem đúng không
     int giagiam=(500*5)/100;
     //so sánh, nếu đúng thì testcase pass, trái lại thì fail
     try {
                //chúng ta cần ép kiểu nó về String để so sánh, vì 1 thằng là int, 1 thằng là StringBuilder, không so sánh được
      Assert.assertEquals(String.valueOf(str), String.valueOf(giagiam)); 
       } catch (Exception e) {
        e.printStackTrace();
       }
   
   }
 
 
 
 @AfterTest
 public void tearDown() throws Exception {
  driver.quit();
   }

}


Sau khi chạy code thì kết quả ok, như mong muốn :D


Trong bài này, chúng ta học được

  • Cách ép kiểu khác như int...về String
  • Cách chuyển String về StringBuilder để dễ dàng cắt ký tự ở vị trí mong muốn
Hẹn gặp các bạn ở bài kế tiếp!




Bài 2: Xác nhận giá của sản phẩm trong list page and details page là bằng nhau

Chào các bạn, ở bài tập trước chúng ta đã học được 1 vài bước cơ bản rồi, hôm nay chúng ta sẽ làm bài số 2.
Vì một số lý do như có quá nhiều thông báo...nên mình sẽ không dùng trang web của adayroi nữa mà chuyển qua web của guru99 để thực hành.
Testcase của bài tập ngày hôm nay như sau:



Bây giờ chúng ta thực hành thôi, bài này mình sẽ sử dụng testNG để các bạn thấy được cấu trúc của nó. Bạn hãy chắc chắn rằng bạn đã cài testNG cho eclipse theo hướng dẫn ở đây

package demo_thuchanh;

import static org.testng.Assert.assertEquals;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

public class TestCase1 {
 private WebDriver driver;
   private String url; 
   
 @BeforeTest
 public void setUp() throws Exception {
  System.setProperty("webdriver.chrome.driver","C:\\chrome\\chromedriver.exe");
     driver = new ChromeDriver();
     url = "http://live.guru99.com/";
     driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
   }
   
   @Test
   public void TestCase() throws Exception {
  
  // 1. Go to http://live.guru99.com
     driver.get(url); 
     
     // 2. Click on Mobile menu
     driver.findElement(By.linkText("MOBILE")).click(); 
   
     // 3. In the list of all mobile , read the cost of Sony Xperia mobile (which is $100)             
     String gia_XPeria = driver.findElement(By.cssSelector("#product-price-1 > span.price")).getText();
    
     // 4. Click on Sony Xperia mobile     
     driver.findElement(By.id("product-collection-image-1")).click();
     
     // 5. Read the XPeria mobile price from details page
     String gia_Detail = driver.findElement(By.cssSelector("span.price")).getText();
          
     //  Product price in list and details page should be equal ($100)
     try {
         assertEquals(gia_XPeria, gia_Detail); 
       } catch (Exception e) {
        e.printStackTrace();
       }
   }
 
 @AfterTest
 public void tearDown() throws Exception {
  driver.quit();
   }

}


Hãy nhìn vào code, bạn sẽ thấy cú pháp @BeforeTest, @Test và @AfterTest.

  • Những thứ setup cần thiết, chúng ta sẽ nhét vào BeforeTest
  • Các bước thực hiện testcase, thì chúng ta sẽ cho vào Test
  • Sau cùng thì sẽ cho vào AfterTest, kiểu như close() hay quit() :D

Đây là kết quả sau khi chạy testcase này

Hẹn gặp các bạn ở bài tiếp theo.

Bài 1: tìm kiếm và sắp xếp kết quả - adayroi

Bài này chúng ta sẽ thực hành 1 vài yêu cầu cơ bản như sau:
Step 1. vào https://www.adayroi.com, in ra title của trang chủ
Step 2. tìm kiếm từ khóa điện thoại
Step 3. chọn sắp xếp theo Bán chạy nhất
Step 4. chụp ảnh màn hình để xem lại kết quả

Dưới đây là code của bài tập này

/* 

https://haibgit.blogspot.com/

Test Steps

Step 1. vào https://www.adayroi.com, in ra title của trang chủ

Step 2. tìm kiếm từ khóa điện thoại

Step 3. chọn sắp xếp theo Bán chạy nhất

Step 4. chụp ảnh màn hình để xem lại kết quả

*/



package BaiTap;



import java.io.File;

import java.io.IOException;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;

import org.openqa.selenium.OutputType;

import org.openqa.selenium.TakesScreenshot;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.chrome.ChromeDriver;

import org.apache.commons.io.FileUtils;





public class Ngay1 {

 public static void main(String[] args) throws IOException {

  String url = "https://www.adayroi.com";

  WebDriver  driver = new ChromeDriver();

  driver.get(url);

  System.out.println(driver.getTitle());

  //nhập từ khóa điện thoại và ô tìm kiếm

  driver.findElement(By.id("header__main__segment_search__form__input")).sendKeys("điện thoại");

  //sau đó click tìm kiếm

  driver.findElement(By.id("header__main__segment_search__form__submit")).click();

     driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);

     //tìm menu dropdown sắp xếp

     driver.findElement(By.id("products_list_order_by_container")).click();

     //click vào bán chạy nhất

     driver.findElement(By.id("a_order_1")).click();

     driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

     //chụp ảnh màn hình để xem kết quả

     File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);

  String png = ("C:\\Ngay1\\sap xep"  + ".png");

  FileUtils.copyFile(scrFile, new File(png));
            //đóng trình duyệt
  driver.close();

 }



}

Sau đây chúng ta hãy nhìn hình ảnh lưu trong C:\Ngay1


Hẹn gặp các bạn ở các bài tiếp theo!

Cài đặt và cấu hình Selenium WebDriver với Java Eclipse

Bài viết này mình sẽ hướng dẫn các bạn cài đặt và cấu hình selenium webdriver trên Eclipse.
Hướng dẫn gồm 3 bước:

  1. Cài JDK
  2. Tải và cài eclipse
  3. Tải selenium cho và add vào project
  4. code ví dụ đơn giản

OK, chúng ta bắt đầu thôi.

Bước 1: Cài JDK:

Trước tiên, cần vào link này để tải JDK về máy. Các bạn nhớ chọn vào đồng ý các điều khoản, sau đó chọn phiên bản phù hợp, ví dụ máy mình window 64 bit thì chọn bản 64bit


Sau khi tải về, chỉ việc cài đặt bình thường bằng các click Next :D

Bước 2: Tải Eclipse


Vào trang chủ Eclipse, tải bản  Eclipse IDE for Java Developers phù hợp với máy tính của bạn.
Sau khi tải xong, giải nén ra chạy file eclipse.exe để sử dụng



Lần đầu tiên chạy eclipse, nó sẽ hỏi bạn nơi lưu các project. Bạn nên chọn lưu ở các ổ khác ổ C - để tránh việc cài lại win sẽ mất. Nên lưu ở ổ D, E 



Sau khi chọn nơi lưu trữ xong, hãy tạo 1 Project mới, đặt tên tùy chọn, ở đây mình đặt newproject





Sau khi tạo project xong, chuột phải vào tên project, tạo mới 1 package - để lưu các class, 1 package có thể chứa nhiều class, 1 project có thể chứa nhiều package để dễ quản lý




Sau khi tạo package xong, thì tạo mới 1 class bằng cách chuột phải vào tên package, chọn new -> class


 đặt tên cho class rồi Finish


Bước 3: tải Selenium cho java, cấu hình cho eclipse

 Truy cập vào trang chủ selenium để tải bản mới nhất



Tiếp theo khi đã có file tải về, ta cấu hình cho eclipse như sau:
  • chuột phải vào tên project, chọn Properties
  • ở cửa sổ mới hiện ra , chọn Java Build Path
  • chọn tab Libraries , sau đó click Add External JARs
  • chọn nơi lưu file selenium vừa tải về ở bước trên






sau đó chọn Apply and Close



Bước 4: chạy code automation đầu tiên

trước tiên cần cài đặt selenium driver cho trình duyệt bạn muốn chạy. Tải tại đây
Ở demo này, mình chọn chrome, nên mình tải nó về



do mình dùng windown, nên chọn của windown
Sau khi tải xong, giải nén nó vào ổ C, thư mục chrome - chưa có thư mục thì tạo nhé :D

Quay lại Eclipse, chúng ta hãy bắt đầu viết code cho nó


Các bạn chú ý dòng code này
System.setProperty("webdriver.chrome.driver","C:\\chrome\\chromedriver.exe");

với C:\\chrome\\chromedriver.exe  là đường dẫn chứa file chromedriver.exe mà ban nãy chúng ta giải nén
Sau khi code xong thì ấn Ctrl + F11 để chạy thôi :D 


và kết quả



ok, vậy là chúng ta đã cài đặt thành công eclipse, cấu hình selenium cho nó và chạy demo đầu tiên.

Dưới đây là code trong bài hướng dẫn:

public static void main(String[] args) {  
  // TODO Auto-generated method stub  
  System.setProperty("webdriver.chrome.driver","C:\\chrome\\chromedriver.exe");  
  //khai báo chrome mới  
  WebDriver driver=new ChromeDriver();  
  //tạo biến url để vào web   
  String url="http://demo.guru99.com/selenium/newtours/";  
  //lấy được title của web hiện tại  
  String title_website="Welcome: Mercury Tours";  
  //khai báo biến title mong muốn để tý kiểm tra  
  String title_mongmuon="";  
  //mở url lên  
  driver.get(url);  
  //lấy title mong muốn là titel gốc của website  
  title_mongmuon=driver.getTitle();  
  //so sánh title của web và title mong muốn. Nếu = nhau thì ok, còn không thì lỗi :D  
  if(title_mongmuon.contentEquals(title_website)) {  
   System.out.println("test ok");  
  }  
  else {  
   System.out.println("test lỗi");  
  }  
  //đóng trình duyệt  
  driver.close();  
  }  
 }  

 

Nguồn: tự viết bằng kiến thức tìm tòi được, có sưu tầm 1 vài hình ảnh của guru99 :D