Ajax là gì?
AJAX là viết tắt của Asynchronous JavaScript & XML, và nó cho phép trang Web truy xuất một lượng nhỏ dữ liệu từ máy chủ mà không cần tải lại toàn bộ trang.
Ajax là một kỹ thuật được sử dụng để tạo các trang web nhanh và động. Kỹ thuật này không đồng bộ và sử dụng kết hợp giữa Javascript và XML.
Nó sẽ cập nhật / các phần của một trang web mà không cần tải lại toàn bộ trang.
Một số ứng dụng nổi tiếng sử dụng kỹ thuật AJAX là Gmail, Google Maps, Facebook, Youtube, v.v.
Trong hướng dẫn này, bạn sẽ học-
- Ajax là gì?
- Ajax hoạt động như thế nào?
- Cách xử lý cuộc gọi Ajax bằng Selenium Webdriver
- Những thách thức trong việc xử lý cuộc gọi Ajax trong Selenium Webdriver
Ajax hoạt động như thế nào?
Ví dụ: khi bạn nhấp vào nút gửi, JavaScript sẽ đưa ra yêu cầu tới máy chủ, diễn giải kết quả và cập nhật màn hình hiện tại mà không cần tải lại trang web.
- Lệnh gọi Ajax là một yêu cầu không đồng bộ do trình duyệt khởi tạo không trực tiếp dẫn đến chuyển đổi trang. Có nghĩa là, nếu bạn kích hoạt một yêu cầu Ajax, người dùng vẫn có thể làm việc trên ứng dụng trong khi yêu cầu đó đang chờ phản hồi.
- AJAX gửi các yêu cầu HTTP từ máy khách đến máy chủ và sau đó xử lý phản hồi của máy chủ mà không cần tải lại toàn bộ trang. Vì vậy, khi bạn thực hiện cuộc gọi AJAX, bạn không chắc chắn về thời gian máy chủ gửi cho bạn phản hồi .
Theo quan điểm của người kiểm tra, nếu bạn đang kiểm tra nội dung hoặc yếu tố được hiển thị, bạn cần phải đợi cho đến khi nhận được phản hồi. Trong cuộc gọi AJAX, dữ liệu được lưu trữ ở định dạng XML và được truy xuất từ máy chủ.
Cách xử lý cuộc gọi Ajax bằng Selenium Webdriver
Các thách thức lớn nhất trong việc xử lý cuộc gọi Ajax là biết thời gian tải cho trang web. Vì quá trình tải trang web sẽ chỉ kéo dài trong một phần giây, nên người thử nghiệm rất khó để kiểm tra ứng dụng đó thông qua công cụ tự động hóa. Đối với điều đó, Selenium Webdriver phải sử dụng phương pháp chờ trong Cuộc gọi Ajax này.
Vì vậy, bằng cách thực hiện lệnh chờ này, selen sẽ tạm dừng việc thực thi Trường hợp thử nghiệm hiện tại và đợi giá trị dự kiến hoặc giá trị mới. Khi giá trị hoặc trường mới xuất hiện, các trường hợp thử nghiệm bị treo sẽ được thực thi bởi Selenium Webdriver.
Sau đây là các phương pháp chờ mà Selenium Webdriver có thể sử dụng
- Thread.Sleep ()
- Thread.Sleep () không phải là một lựa chọn khôn ngoan vì nó sẽ tạm ngưng luồng hiện tại trong một khoảng thời gian được chỉ định.
- Trong AJAX, bạn không bao giờ có thể chắc chắn về thời gian chờ chính xác. Vì vậy, thử nghiệm của bạn sẽ không thành công nếu phần tử không hiển thị trong thời gian chờ đợi. Hơn nữa, nó làm tăng chi phí vì việc gọi Thread.sleep (t) làm cho luồng hiện tại được chuyển từ hàng đợi đang chạy sang hàng đợi.
- Sau khi đạt đến thời gian 't', luồng hiện tại sẽ chuyển từ hàng đợi sang hàng đợi sẵn sàng, và sau đó phải mất một khoảng thời gian để được CPU chọn và chạy.
- Chờ đợi ngầm ()
- Phương thức này yêu cầu webdriver đợi nếu phần tử không khả dụng ngay lập tức, nhưng quá trình chờ này sẽ diễn ra trong toàn bộ thời gian trình duyệt mở. Vì vậy, bất kỳ tìm kiếm nào cho các phần tử trên trang có thể mất thời gian chờ đợi ngầm định.
- Chờ đợi rõ ràng ()
- Chờ đợi rõ ràng được sử dụng để đóng băng việc thực thi thử nghiệm cho đến khi một điều kiện cụ thể được đáp ứng hoặc thời gian trôi đi tối đa.
- WebdriverWait
- Nó có thể được sử dụng cho bất kỳ điều kiện nào. Điều này có thể đạt được với WebDriverWait kết hợp với Điều kiện mong đợi
- Cách tốt nhất để đợi một phần tử động là kiểm tra điều kiện mỗi giây và tiếp tục lệnh tiếp theo trong tập lệnh ngay khi điều kiện được đáp ứng.
Nhưng vấn đề với tất cả những sự chờ đợi này là bạn phải đề cập đến đơn vị thời gian chờ. Điều gì sẽ xảy ra nếu phần tử vẫn không xuất hiện trong thời gian đó? Vì vậy, có một sự chờ đợi nữa được gọi là Chờ đợi trôi chảy.
- Chờ lưu loát
- Đây là một triển khai của giao diện Chờ có thời gian chờ và khoảng thời gian bỏ phiếu. Mỗi cá thể FluentWait xác định lượng thời gian tối đa để chờ một điều kiện, cũng như tần suất kiểm tra điều kiện.
Những thách thức trong việc xử lý cuộc gọi Ajax trong Selenium Webdriver
- Sử dụng lệnh "pause" để xử lý cuộc gọi Ajax không hoàn toàn đáng tin cậy. Thời gian tạm dừng dài làm cho bài kiểm tra chậm không thể chấp nhận được và làm tăng thời gian kiểm tra. Thay vào đó, "waitforcondition" sẽ hữu ích hơn trong việc thử nghiệm các ứng dụng Ajax.
- Rất khó để đánh giá rủi ro liên quan đến các ứng dụng Ajax cụ thể
- Được nhà phát triển trao toàn quyền tự do sửa đổi ứng dụng Ajax khiến quá trình thử nghiệm trở nên khó khăn
- Việc tạo yêu cầu kiểm tra tự động có thể khó đối với các công cụ kiểm tra vì ứng dụng AJAX như vậy thường sử dụng kỹ thuật mã hóa hoặc tuần tự hóa khác nhau để gửi dữ liệu POST.
Ví dụ cho việc XỬ LÝ Ajax
nhập org.openqa.selenium.By;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.WebElement;nhập org.openqa.selenium.chrome.ChromeDriver;nhập org.openqa.selenium.support.ui.EosystemConditions;nhập org.openqa.selenium.support.ui.WebDriverWait;nhập khẩu org.testng.Assert;nhập org.testng.annotations.BeforeClass;nhập org.testng.annotations.Test;lớp công cộng Ajaxdemo {private String URL = "http://demo.guru99.com/test/ajax.html";Trình điều khiển WebDriver;WebDriverWait đợi;@BeforeClasspublic void setUp () {System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");// tạo phiên bản chromedriver = new ChromeDriver ();driver.manage (). window (). Maxim ();driver.navigate (). to (URL);}@Kiểm trapublic void test_AjaxExample () {Bởi container = By.cssSelector (". Container");wait = new WebDriverWait (trình điều khiển, 5);wait.until (Dự kiến.presenceOfElementLocated (vùng chứa));// Nhận văn bản trước khi thực hiện lệnh gọi ajaxWebElement noTextElement = driver.findElement (By.className ("radiobutton"));String textBefore = noTextElement.getText (). Trim ();// Nhấp vào nút radiodriver.findElement (By.id ("yes")). click ();// Nhấp vào nút Kiểm tradriver.findElement (By.id ("buttoncheck")). click ();/ * Nhận tin nhắn sau cuộc gọi ajax * /WebElement TextElement = driver.findElement (By.className ("radiobutton"));wait.until (Dự kiến điều kiện.visibilityOf (TextElement));Chuỗi textAfter = TextElement.getText (). Trim ();/ * Xác minh cả tin nhắn trước cuộc gọi ajax và sau cuộc gọi ajax. * /Assert.assertNotEquals (textBefore, textAfter);System.out.println ("Thực hiện cuộc gọi Ajax");StringworthyText = "Nút radio được chọn và giá trị của nó là Có";/ * Xác minh văn bản mong đợi với văn bản được cập nhật sau cuộc gọi ajax * /Assert.assertEquals (textAfter, mong đợiText);trình điều khiển.close ();}}
Tóm lược:
- AJAX cho phép trang Web lấy một lượng nhỏ dữ liệu từ máy chủ mà không cần tải lại toàn bộ trang.
- Để kiểm tra ứng dụng Ajax, nên áp dụng các phương pháp chờ khác nhau
- ThreadSleep
- Chờ đợi ngầm
- Chờ đợi rõ ràng
- WebdriverWait
- Chờ lưu loát
- Việc tạo yêu cầu kiểm tra tự động có thể khó đối với các công cụ kiểm tra vì ứng dụng AJAX như vậy thường sử dụng kỹ thuật mã hóa hoặc tuần tự hóa khác nhau để gửi dữ liệu POST.