+1

Chương 1: Bắt đầu với Selenium IDE (tiếp)

Selenium test với các ứng dụng AJAX

Ngày nay, ứng dụng web được thiết kế theo cách mà chúng xuất hiện giống với các ứng dụng destop. Các nhà phát triển web đang thực hiện điều này bằng cách sử dụng AJAX bên trong ứng dụng web. AJAX là viết tắt của Asynchronous JavaScript And XML do trên thực tế nó dựa vào JavaScript để tạo lời gọi không đồng bộ, sau đó trở về XML với dữ liệu mà người dùng hay ứng dụng yêu cầu. AJAX không còn dựa vào XML, khi ngày càng nhiều người chuyển qua JSON, JavaScript Object Notation, do nó chuyển dữ liệu nhẹ nhàng hơn.

Thời điểm hành động - làm việc trên trang với AJAX

Ở ví dụ đầu tiên, ta sẽ click vào 1 link và sau đó xác nhận text có trên màn hình:

  1. Khởi động Selenium IDE và chắc chắn rằng nút Record đã được nhấn
  2. Di chuyển đến http://book.theautomatedtester.co.uk/chapter1
  3. Click vào text Click this link to load a page with AJAX.
  4. Xác nhận text hiển thị trên màn hình. Lúc này màn hình test sẽ trông giống như ảnh :

Selection_001.png

  1. Chạy test bạn đã tạo. Khi chạy xong, nó sẽ trông như ảnh sau:

Selection_002.png

Hãy xem trang mà bạn đang kiểm tra. Bạn có nhìn thấy text mà test mong muốn không? Mặc dù có thấy nhưng tại sao test lại lỗi? Đó là bởi khi test đến điểm này, các element trong đó bao gồm text đã không được load lên trong DOM. Điều này là bởi nó đang được yêu cầu và trả lại từ web server bên trong trình duyệt.

Để sửa lỗi này, ta cần thêm lệnh mới vào test để test có thể pass:

  1. Right-click vào bước bị lỗi để Selenium IDE context menu xuất hiện
  2. Click vào Insert New Commands
  3. Ở Command select box, nhập waitForElementPresent hoặc chọn nó từ drop-down
  4. Trong Target box, thêm target được sử dụng trong lệnh verifyTextPresent
  5. Chạy test và giờ thì nó đã thành công:

Selection_003.png

Điều gì vừa xảy ra?

Selenium không ngầm đợi các mục cần tương tác. Do vậy muốn đợi, ta có thể lập lệnh. Lệnh waitFor sẽ nghỉ sau 30 giây mặc định nhưng nếu bạn cần nghỉ lâu hơn, bạn có thể ghi rõ muốn nghỉ bao lâu bằng cách sử dụng lệnh setTimeout. Lệnh này sẽ cài đặt giá trị nghỉ mà test sẽ sử dụng trong các lệnh sau này.

Nếu muốn thay đổi giá trị đợi mặc định , bạn hãy vào Options| Options , vào tab General , dưới giá trị Default timeout của lệnh có ghi millisecond(30s = 30000ms), thay đổi giá trị mà bạn muốn. Nhớ là 1 giây bằng 1000 millisecond.

Thời điểm hành động - làm việc với ứng dụng AJAX

Khi càng ngày càng có nhiều ứng dụng cố gắng hành động như ứng dụng destop, ta cần có thể xử lý các bước đồng bộ hóa giữa test và ứng dụng. Trong phần này, ta sẽ thấy làm thế nào để xử lý AJAX và những gì để đồng bộ hóa.

  1. Click vào load text to the page button.
  2. Di chuyển đến http://book.theautomatedtester.co.uk/chapter1 .
  3. Đợi text I have been added with a timeout. Test của bạn sẽ trông giống hình bên dưới:

Selection_004.png

Điều gì đã xảy ra?

Ở ví dụ trước, ta đã đợi element xuất hiện trên trang. Có rất nhiều lệnh khác nhau ta có thể sử dụng để đợi. Cũng nhớ rằng ta có thể đợi 1 cái gì đó không phải ở trên trang. Ví dụ, waitForElementNotPreset. Các câu lệnh dưới đây bổ sung vào bộ lệnh waitFor nhưng không phải là danh sách đầy đủ:

‹-waitForAlertNotPresent

-waitForAlertPresent

‹-waitForElementPresent

‹-waitForElementNotPresent

‹-waitForTextPresent

-waitForTextNotPresent

‹-waitForPageToLoad

‹-waitForFrameToLoad

Một số lệnh chạy ngầm khi các lệnh khác đang chạy. Ví dụ như lệnh clickAndWait. Với lệnh này sẽ bắn ra lệnh click và sau đó bắn ra waitForPageToLoad. Một ví dụ khác là lệnh mở, nghĩa là chỉ hoàn thành khi trang đã được load hoàn chỉnh.

Nếu cảm thấy tự tin, bạn hãy thử với những kĩ thuật waitFor khác nhau nhé.

Pop quiz - đợi các element

1.Nếu một element thêm sau khi trang web đã load lên, lệnh nào bạn nên sử dụng để chắc chắn sau này test sẽ pass?

a. waitForElementPresent

b. pause

c. assertElementPresent


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí