Bảng cheat bộ định vị Selenium

Trong bài Hướng dẫn về Selenium này, tôi sẽ giới thiệu với các bạn về Selenium Webdriver, framework kiểm thử tự động được sử dụng phổ biến nhất trên thị trường hiện nay. Nó có nguồn mở và có thể được sử dụng với tất cả các ngôn ngữ lập trình nổi bật như Java, Python, C#, Ruby, Perl, v.v. , để tự động hóa các hoạt động của trình duyệt. Thông qua bài viết này, tôi sẽ cho bạn biết mọi thứ bạn cần biết để bắt đầu thử nghiệm các ứng dụng web bằng Selenium WebDriver.  

Dưới đây là các chủ đề tôi sẽ trình bày trong bài viết này về Hướng dẫn Selenium

Blog hướng dẫn Selenium này sẽ cung cấp cho bạn một cái nhìn thoáng qua về tất cả các khái niệm quan trọng cần thiết cho Đào tạo Selenium

Selenium WebDriver là gì?

Selenium WebDriver là một khung thử nghiệm tự động hóa dựa trên web có thể kiểm tra các trang web được khởi chạy trên nhiều trình duyệt web và hệ điều hành khác nhau. Trên thực tế, bạn cũng có quyền tự do viết các tập lệnh kiểm tra bằng các ngôn ngữ lập trình khác nhau như Java, Perl, Python, Ruby, C#, PHP và JavaScript. Xin lưu ý rằng Mozilla Firefox là trình duyệt mặc định của Selenium WebDriver.  

Nhưng nhiều lần, những người thử nghiệm vừa chớm nở có nghi ngờ này,

Selenium có dễ học không?

Để trả lời câu hỏi này một cách rất bình thường, tôi sẽ nói, “Vâng, đó là. ”. Selenium thực sự dễ học và thành thạo vì bạn cần có hiểu biết cơ bản về bất kỳ ngôn ngữ lập trình nổi bật nào như Java, C#, Python, Perl, Ruby, PHP. Có kiến ​​thức trước về bất kỳ ngôn ngữ lập trình nào trong số này sẽ hữu ích cho việc viết các trường hợp thử nghiệm. Nhưng trong trường hợp bạn không có thì đừng lo lắng. Selenium IDE là một công cụ dựa trên GUI mà bạn có thể sử dụng hiệu quả

Phần mềm Selenium làm gì?

Dưới đây là một số ứng dụng thú vị nhất của phần mềm Selenium

  1. Kiểm tra tự động. Kiểm tra tự động hữu ích trong các dự án lớn hơn nếu không có Selenium, người kiểm tra sẽ phải kiểm tra thủ công từng chức năng được tạo. Với Selenium, tất cả các tác vụ thủ công đều được tự động hóa, do đó giảm bớt gánh nặng và căng thẳng cho người kiểm tra
  2. Khả năng tương thích trình duyệt chéo. Selenium hỗ trợ nhiều loại trình duyệt như Chrome, Mozilla Firefox, Internet Explorer, Safari và Opera
  3. Tăng phạm vi kiểm tra. Với việc tự động hóa các bài kiểm tra, thời gian kiểm tra tổng thể sẽ giảm, dẫn đến giải phóng thời gian cho người kiểm tra để thực hiện nhiều kiểm tra hơn trên các kịch bản kiểm tra khác nhau trong cùng một thời điểm
  4. Giảm thời gian thực hiện kiểm thử. Vì Selenium hỗ trợ thực thi kiểm tra song song nên nó giúp giảm thời gian thực hiện kiểm tra song song rất nhiều
  5. Hỗ trợ nhiều hệ điều hành. Selenium WebDriver cung cấp hỗ trợ trên nhiều Hệ điều hành như Windows, Linux, UNIX, Mac, v.v. Với Selenium WebDriver, bạn có thể tạo một trường hợp thử nghiệm trên HĐH Windows và thực thi nó trên Mac OS

Những điều cơ bản của Selenium là gì?

WebDriver được giới thiệu như một phần của Selenium v2. 0. Selenium v1 chỉ bao gồm IDE, RC và Grid. Nhưng bước đột phá lớn trong dự án Selenium là khi WebDriver được phát triển và giới thiệu như một sự thay thế trong Selenium v2. Tuy nhiên, với việc phát hành Selenium v3, RC đã không còn được dùng nữa và chuyển sang gói kế thừa. Bạn vẫn có thể tải xuống và làm việc với RC, nhưng đừng mong đợi bất kỳ sự hỗ trợ nào cho nó

Tóm lại, lợi thế của WebDriver so với RC là

  • Hỗ trợ nhiều ngôn ngữ lập trình, hệ điều hành và trình duyệt web hơn
  • Khắc phục những hạn chế của Selenium 1 như tải lên tệp, tải xuống, cửa sổ bật lên và rào cản hộp thoại
  • Các lệnh đơn giản hơn khi so sánh với RC và API tốt hơn
  • Hỗ trợ kiểm tra hàng loạt, kiểm tra trình duyệt chéo & kiểm tra theo hướng dữ liệu

Nhưng nhược điểm khi so sánh với RC là không thể tạo báo cáo thử nghiệm. RC tạo báo cáo chi tiết

Hình ảnh bên dưới mô tả cách thức hoạt động của WebDriver

Bảng cheat bộ định vị Selenium

Nhưng có bao giờ bạn thắc mắc tại sao lại cần Selenium Webdriver chưa?

Hạn chế của Selenium RC và sự ra đời của WebDriver

Bạn có thể ngạc nhiên khi tôi nói rằng Selenium RC đã trở thành hit ngay khi nó được tung ra. Đó là bởi vì nó đã khắc phục được vấn đề về chính sách cùng nguồn gốc, một vấn đề lớn khi thử nghiệm các ứng dụng web với Selenium Core. Nhưng bạn có biết vấn đề về chính sách cùng nguồn gốc là gì không?

Chính sách cùng nguồn gốc là các quy tắc thực thi mô hình bảo mật ứng dụng web. Theo chính sách cùng nguồn gốc, trình duyệt web sẽ cho phép mã JavaScript truy cập các phần tử trên trang web, khi và chỉ khi cả JavaScript và trang web đang được kiểm tra được lưu trữ trên cùng một miền. Selenium Core là một công cụ kiểm tra dựa trên JavaScript đã bị vô hiệu hóa vì lý do tương tự là nó không thể kiểm tra mọi trang web

Nhưng khi Selenium RC xuất hiện, nó đã loại bỏ vấn đề về chính sách cùng nguồn gốc của những người thử nghiệm. Nhưng, RC đã làm điều đó như thế nào? . Vì vậy, RC là một công cụ là sự kết hợp của hai thành phần. Máy chủ Selenium RC và máy khách Selenium RC

Máy chủ Selenium RC là một máy chủ proxy HTTP, được thiết kế để “lừa” trình duyệt tin rằng Selenium Core và ứng dụng web đang được kiểm tra là từ cùng một miền. Do đó, không có cách nào ngăn mã JavaScript truy cập và kiểm tra bất kỳ trang web nào

Mặc dù Selenium RC là một thành công lớn, nhưng nó cũng có những vấn đề riêng. Cái chính là thời gian thực hiện các bài kiểm tra. Vì máy chủ Selenium RC là người trung gian trong giao tiếp giữa trình duyệt và các lệnh Selenium của bạn, nên việc thực thi kiểm tra rất tốn thời gian. Bên cạnh yếu tố thời gian, kiến ​​trúc của RC cũng hơi phức tạp

Kiến trúc này liên quan đến việc tiêm Selenium Core đầu tiên vào trình duyệt web. Sau đó Selenium Core sẽ nhận hướng dẫn từ máy chủ RC và chuyển nó thành lệnh JavaScript. Mã JavaScript này chịu trách nhiệm truy cập và kiểm tra các phần tử web. Nếu bạn nhìn vào hình ảnh bên dưới, bạn sẽ biết được cách thức hoạt động của RC

Bảng cheat bộ định vị Selenium

Để khắc phục những vấn đề này, Selenium WebDriver đã được phát triển. WebDriver nhanh hơn vì nó tương tác trực tiếp với trình duyệt và không có sự tham gia của máy chủ proxy bên ngoài. Kiến trúc cũng đơn giản hơn vì trình duyệt được kiểm soát từ cấp hệ điều hành. Hình ảnh dưới đây sẽ giúp bạn hiểu cách thức hoạt động của WebDriver

webdriver architecture - selenium tutorial

Một lợi ích khác với WebDriver là nó hỗ trợ thử nghiệm trên trình điều khiển Đơn vị HTML là trình điều khiển không đầu. Khi chúng ta nói trình điều khiển không đầu, điều đó có nghĩa là trình duyệt không có GUI. Mặt khác, RC không hỗ trợ trình điều khiển Đơn vị HTML. Đây là một số lý do khiến WebDriver vượt qua RC

Trước khi tìm hiểu các khái niệm về Selenium, bạn nên có hiểu biết cơ bản về Java hoặc bất kỳ ngôn ngữ lập trình hướng đối tượng nào khác. Các ngôn ngữ được Selenium hỗ trợ bao gồm C#, Java, Perl, PHP, Python và Ruby. Hiện tại Selenium Webdriver phổ biến nhất với Java và C#

Bây giờ chúng ta hãy tiếp tục và tìm hiểu về “các phần tử trình duyệt” trong phần tiếp theo của hướng dẫn Selenium này, nơi tôi sẽ cho bạn biết những phần tử này là gì và cách thử nghiệm diễn ra trên các phần tử web này

Các phần tử trình duyệt là gì?

Các phần tử là các thành phần khác nhau hiện diện trên các trang web. Các yếu tố phổ biến nhất mà chúng tôi nhận thấy khi duyệt là

  • hộp văn bản
  • Nút CTA
  • Hình ảnh
  • siêu liên kết
  • Nút radio / Hộp kiểm
  • Vùng văn bản/Thông báo lỗi
  • Hộp thả xuống/ Hộp danh sách/ Hộp tổ hợp
  • Bảng Web/ Bảng HTML
  • Khung

Kiểm tra các yếu tố này về cơ bản có nghĩa là chúng tôi phải kiểm tra xem chúng có hoạt động tốt và phản hồi theo cách chúng tôi muốn hay không. Ví dụ: nếu chúng tôi đang kiểm tra hộp văn bản, bạn sẽ kiểm tra hộp văn bản đó để làm gì?

  1. Cho dù chúng tôi có thể gửi văn bản hoặc số vào hộp văn bản
  2. Chúng tôi có thể truy xuất văn bản đã được chuyển đến hộp văn bản, v.v.

Nếu chúng tôi đang thử nghiệm một hình ảnh, chúng tôi có thể muốn

  1. Tải xuống hình ảnh
  2. Tải lên hình ảnh
  3. Nhấp vào liên kết hình ảnh
  4. Truy xuất tiêu đề hình ảnh, v.v.

Tương tự, các hoạt động có thể được thực hiện trên từng phần tử được đề cập trước đó. Nhưng chỉ sau khi các phần tử được đặt trên trang web, chúng ta mới có thể thực hiện các thao tác và bắt đầu kiểm tra chúng phải không?

Định vị các phần tử trình duyệt hiện diện trên trang web

Mỗi phần tử trên một trang web sẽ có các thuộc tính (property). Các phần tử có thể có nhiều hơn một thuộc tính và hầu hết các thuộc tính này sẽ là duy nhất cho các phần tử khác nhau. Ví dụ: xem xét một trang có hai phần tử. một hình ảnh và một hộp văn bản. Cả hai phần tử này đều có thuộc tính "Tên" và thuộc tính "ID". Các giá trị thuộc tính này cần phải là duy nhất cho mỗi phần tử. Nói cách khác, hai phần tử không thể có cùng giá trị thuộc tính. Các phần tử có thể có cùng giá trị cho 'Tên lớp'

Trong ví dụ được xem xét, hình ảnh và hộp văn bản không được có cùng giá trị 'ID' cũng như giá trị 'Name' giống nhau. Tuy nhiên, có một số thuộc tính có thể chung cho một nhóm thành phần trên trang. Tôi sẽ cho bạn biết đó là những thuộc tính nào sau, nhưng trước đó, hãy để tôi liệt kê 8 thuộc tính mà chúng ta có thể xác định vị trí các phần tử bằng cách sử dụng. Các thuộc tính đó là ID, Tên, Tên lớp, Tên thẻ, Văn bản liên kết, Văn bản liên kết một phần, CSS và XPath

Vì các phần tử được định vị bằng các thuộc tính này nên chúng tôi gọi chúng là 'Bộ định vị'. Bộ định vị là

  • Bởi. id
    Cú pháp. người lái xe. findElement(By. id(“xxx”));
  • Bởi. tên
    Cú pháp. người lái xe. findElement(By. tên(“xxx”));
  • Bởi. className
    Cú pháp. người lái xe. findElement(By. className(“xxx”));
  • Bởi. tagName
    Cú pháp. người lái xe. findElement(By. tagName(“xxx”));
  • Bởi. linkText
    Cú pháp. người lái xe. findElement(By. linkText(“xxx”));
  • Bởi. partLinkText
    Cú pháp. người lái xe. findElement(By. partLinkText(“xxx”));
  • Bởi. css
    Cú pháp. người lái xe. findElement(By. css(“xxx”));
  • Bởi. xpath
    Cú pháp. người lái xe. findElement(By. xpath(“xxx”));

Bằng cách nhìn vào cú pháp trên, bạn có thể nhận ra rằng các bộ định vị được gọi bên trong các phương thức. Vì vậy, trước khi tiếp tục, bạn cần tìm hiểu tất cả các phương pháp, lệnh trình duyệt và chức năng khác có thể được sử dụng để thực hiện các thao tác trên các phần tử

Thao tác trên phần tử trình duyệt

Từ phần này của blog trở đi, bạn sẽ có rất nhiều niềm vui vì sẽ có ít lý thuyết hơn và nhiều mã hơn. Vì vậy, hãy chuẩn bị sẵn sàng và luôn mở IDE Eclipse của bạn với các gói Selenium cần thiết đã được cài đặt

Để bắt đầu kiểm tra một trang web, trước tiên chúng ta cần mở trình duyệt, sau đó điều hướng đến trang web bằng cách cung cấp URL phải không? . Đầu tiên, trình duyệt Firefox sẽ được bắt đầu và sau đó nó sẽ điều hướng đến trang đăng nhập của Facebook

package seleniumWebDriver;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class WebDriverClass 
{
public static void main(String[] args) 
{
System.setProperty("webdriver.gecko.driver", "files/geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.get("https://www.facebook.com/");
driver.getTitle();
driver.quit();
}
}

tổ chức nhập khẩu. openqa. selen. Trình điều khiển web;

tổ chức nhập khẩu. openqa. selen. firefox. Trình điều khiển Firefox;

Hệ thống. setProperty(“trình điều khiển web. con tắc kè. trình điều khiển”, “tệp/trình điều khiển tắc kè. exe”); . Sau Firefox 35, chúng ta cần tải xuống trình điều khiển Gecko để hoạt động với WebDriver. Trong trường hợp bạn muốn thử nghiệm trên chrome, thì bạn phải tải xuống ChromeDriver, đây là một. exe và chỉ định đường dẫn của nó trong dòng mã này. Chúng tôi phải làm điều đó tương tự trong trường hợp các trình duyệt khác cũng vậy

Trình điều khiển WebDriver = FirefoxDriver mới();

người lái xe. nhận(“https. //www. giáo dục. đồng/”);

người lái xe. getTitle();

người lái xe. từ bỏ();

Tuy nhiên, nếu bạn muốn điều hướng đến một URL khác và sau đó thực hiện kiểm tra thì sao? . lệnh to() như được hiển thị trong đoạn mã bên dưới. Nếu sau đó bạn muốn quay lại trang trước, thì bạn có thể làm điều đó bằng cách sử dụng điều hướng. quay lại() lệnh. Tương tự để làm mới trang hiện tại, bạn có thể sử dụng điều hướng. làm mới() lệnh

driver.navigate().to(“https://www.edureka.co/testing-with-selenium-webdriver”);
driver.navigate().refresh();
driver.navigate().back();

Nếu bạn muốn tối đa hóa kích thước của cửa sổ trình duyệt, thì bạn có thể làm điều đó bằng cách sử dụng mã trong đoạn mã bên dưới

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

Trong trường hợp bạn muốn đặt kích thước tùy chỉnh cho cửa sổ trình duyệt, thì bạn có thể đặt kích thước của riêng mình như trong đoạn mã bên dưới

Dimension d = new Dimension(420,600);
driver.manage().window().setSize(d); 

Bây giờ bạn đã biết hầu hết những điều cơ bản, hãy chuyển sang chủ đề tiếp theo trong blog hướng dẫn về Selenium này. Hãy thử tìm một phần tử trên trang web và sau đó thực hiện bất kỳ thao tác nào có thể

Tôi khá chắc chắn rằng tất cả các bạn đều có tài khoản Facebook. Vì vậy, hãy để tôi chỉ cho bạn cách đăng nhập vào Facebook bỏ qua thông tin đăng nhập từ chính mã đó

Có hai trường văn bản trong trang đăng nhập Facebook, một cho Email/Điện thoại và một cho Mật khẩu. Chúng ta phải xác định vị trí hai phần tử này, chuyển thông tin đăng nhập cho các phần tử đó và sau đó tìm phần tử thứ ba. Nút đăng nhập cần được nhấp vào

Nhìn vào ảnh chụp màn hình bên dưới. Đây là ảnh chụp màn hình trang đăng nhập của Facebook

facebook screenshot - selenium tutorial

Nếu bạn Kiểm tra (Ctrl + Shift + i) trang này, thì bạn sẽ nhận được cửa sổ tương tự trong trình duyệt của mình. Sau đó, bên dưới Phần tử, danh sách tất cả các phần tử có trên trang và thuộc tính của chúng sẽ được hiển thị. Có ba phần được đánh dấu trong ảnh chụp màn hình ở trên. Phần tử được đánh dấu đầu tiên là trường văn bản email, phần thứ hai là trường văn bản mật khẩu và phần thứ ba là nút Đăng nhập

Nếu bạn có thể nhớ lại, tôi đã đề cập trước đó rằng các phần tử này có thể được định vị bằng các kỹ thuật định vị phần tử. Hãy sử dụng nó để xác định vị trí các phần tử này và gửi các giá trị trường.
Đây là cú pháp tìm phần tử. người lái xe. findElement(By. id(“xxx”));
Để gửi giá trị, chúng ta có thể sử dụng phương thức sendKeys(“credentials“);
Để nhấp vào một nút, chúng ta

Vì vậy, hãy bắt đầu với việc tìm phần tử và thực hiện thao tác trên phần tử đó. Mã cho nó nằm trong đoạn mã dưới đây

driver.findElement(By.name("email")).sendKeys("[email protected]");
driver.findElement(By.name("pass")).sendKeys("xxxxxx");
driver.findElement(By.id("u_0_q")).click();

Trong dòng #1, chúng tôi đang xác định phần tử Email theo thuộc tính 'Tên' duy nhất của nó và gửi cho nó EmailID.
Ở dòng số 2, chúng tôi đang xác định phần tử Mật khẩu bằng thuộc tính 'Tên' duy nhất của phần tử đó và gửi mật khẩu cho phần tử đó.
Trong dòng #3, chúng tôi đang định vị phần tử nút Đăng nhập bằng ID duy nhất của nó và nhấp vào nút đó.

Chỉ thêm những dòng mã này có thể không đủ. Đó là do tính năng động của trang, trang có thể không phản hồi ngay lập tức và vào thời điểm tải trang, WebDriver sẽ bị chấm dứt và đưa ra lỗi ngoại lệ hết thời gian chờ. Sự cố này có thể không xảy ra trên trang của Facebook vì tốc độ nhanh, nhưng rất có thể sẽ xảy ra ở bất kỳ trang web Thương mại điện tử nào khác và các trang web động khác

Để khắc phục vấn đề này, chúng ta cần sử dụng một kỹ thuật nâng cao. Chúng tôi cần yêu cầu Trình điều khiển web của mình đợi sau khi trang được truy cập và sau khi tải xong, chúng tôi cần xác định vị trí các phần tử rồi thực hiện các hành động

Trong trường hợp bạn muốn WebDriver của mình đợi cho đến khi tất cả các phần tử tải trong một trang web rồi đóng trình duyệt, thì chúng tôi có thể đạt được điều đó bằng cách sử dụng trình điều khiển. phương thức wait() hoặc Chủ đề. phương thức ngủ (). Tuy nhiên, nếu bạn đang viết mã nâng cao hơn, thì bạn nên sử dụng Chờ đợi tiềm ẩn hoặc Chờ đợi rõ ràng. Trong blog tiếp theo của loạt bài hướng dẫn Selenium này, tôi sẽ giải thích khái niệm về điều kiện chờ. Nhưng đối với trường hợp của chúng tôi, các lệnh dưới đây là đủ

 
driver.wait(5000);
// or use this:-
Thread.sleep(5000);

Tuy nhiên, trong khi làm việc với các điều kiện chờ, hãy nhớ nhập thư viện này.
nhập java. sử dụng. đồng thời. TimeUnit;
Chúng tôi làm điều đó bởi vì, lớp chờ và các phương thức liên quan của nó sẽ có mặt trong thư viện này.

Toàn bộ mã tôi đã giải thích, có trong đoạn mã dưới đây

package seleniumWebDriver;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import java.util.concurrent.TimeUnit;

public class WebDriverClass 
{
public static void main(String[] args) 
{
System.setProperty("webdriver.gecko.driver", "files/geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.get("https://www.facebook.com/");
driver.manage().window().maximize();
driver.getTitle();
driver.navigate().to(“https://www.edureka.co/testing-with-selenium-webdriver”);

driver.navigate().back();
driver.navigate().refresh();
driver.wait(5000);
// or use
// Thread.sleep(5000);

driver.findElement(By.name("email")).sendKeys("[email protected]");
driver.findElement(By.name("pass")).sendKeys("xxxxxx");
driver.findElement(By.id("u_0_q")).click();

driver.quit();
}
}

Khi bạn thay thế thông tin đăng nhập bằng email và mật khẩu thực của mình và thực thi mã này, thì Facebook sẽ mở trong một cửa sổ mới, hãy nhập thông tin đăng nhập và đăng nhập vào tài khoản của bạn

thì đấy. Bạn đã đăng nhập thành công, có nghĩa là mã hoàn chỉnh của bạn đã được thực thi hoàn toàn

Tôi đã sử dụng các thuộc tính ID và Name để định vị các phần tử. Trên thực tế, bạn có thể sử dụng bất kỳ công cụ định vị nào khác để tìm các phần tử. XPath là kỹ thuật định vị hữu ích và quan trọng nhất. Tuy nhiên, miễn là bạn có thể tìm thấy ngay cả một trong các thuộc tính và sử dụng chúng để định vị các phần tử, bạn sẽ ổn thôi. Bạn có thể xem video dưới đây được cung cấp bởi một chuyên gia trong ngành, nơi cô ấy đã thực hành tất cả các tính năng được đề cập ở trên của Selenium WebDriver

Hướng dẫn Selenium WebDriver. Hướng dẫn Selenium cho người mới bắt đầu. Đào tạo Selenium WebDriver. Edureka

Hướng dẫn Selenium WebDriver này nói về những hạn chế của Selenium RC và nhu cầu về Selenium WebDriver là gì. Nó đi vào chi tiết về những ưu điểm mà WebDriver có được so với RC và cách nó thay thế RC để thử nghiệm tự động hóa

Blog tiếp theo của tôi trong loạt bài hướng dẫn về Selenium này là về cách sử dụng TestNG cùng với Selenium WebDriver. Tôi khuyên bạn nên đọc nó vì nó nói về cách khắc phục những hạn chế của WebDriver (quản lý trường hợp thử nghiệm và tạo báo cáo) bằng cách sử dụng TestNG

Nếu bạn gặp bất kỳ sự cố nào khi thực thi mã có trong blog này hoặc nếu bạn có bất kỳ câu hỏi nào khác, hãy đặt chúng vào phần nhận xét bên dưới và chúng tôi sẽ liên hệ lại với bạn ngay

Nếu bạn muốn học Selenium và xây dựng sự nghiệp trong lĩnh vực thử nghiệm, thì hãy xem Chương trình đào tạo chứng chỉ Selenium trực tuyến, tương tác của chúng tôi tại đây, đi kèm với hỗ trợ 24*7 để hướng dẫn bạn trong suốt thời gian học tập

Có một câu hỏi cho chúng tôi?