Article: Selenium với Erlang, hay câu chuyện về XML và XSLT 961

ngocdaothanh.myopenid.com 149
Updated about 1 year ago

Cucumber, RSpec, và Selenium là 3 thư viện test de facto đối với Ruby hiện nay. Chúng bổ sung cho nhau, nên khi viết chương trình web bằng Ruby, người ta thường dùng cả 3. Hầu hết ngôn ngữ đều có thư viện tương tự cả 3. Bài viết Cucumber với Erlang đã trình bày cách viết thư viện có tính năng tương tự như Cucumber và RSpec cho Erlang. Mặc dù trên GitHub có project erl_selenium, nhưng Selenium chưa chính thức hỗ trợ sẵn Erlang. Bài viết này giới thiệu cách dùng xmerl để biến đổi XML theo phong cách XSLT thông qua ví dụ về tự viết Erlang client driver cho Selium RC.

Selenium RC

[còn tiếp]

XML và XSLT

Để biến đổi cấu trúc XML thành cái gì đó, ví dụ biến thành cấu trúc XML khác, thành HTML, thành chuỗi kí tự plain text v.v. người ta thường dùng XSLT:

  1. Nghĩ ra luật biến đổi, dùng cú pháp của XSLT để diễn tả luật, rồi lưu thành thành tập tin .xml.
  2. Dùng chương trình biến đổi, chương trình này nhận 2 đầu vào là tập tin XML cần biến đổi và tập tin XSLT chứa luật biến đổi, để biến đổi thành tập tin cần thiết.

XML, XSLT, và Selenium RC

Để cho phép chương trình test viết bằng nhiều ngôn ngữ khác nhau điều khiển browser, Selenium có Remote Control (RC) Server viết bằng Java. Client sẽ thông qua giao thức HTTP để điều khiển RC server.

Phần Selenium Core định nghĩa API trong tập tin iedoc.xml trong tập tin selenium-server.jar. Khi muốn viết client cho ngôn ngữ nào, chỉ cần biến đổi tập tin này thành mã nguồn của ngôn ngữ đó. Ví dụ iedoc2ruby.xml là tập tin XSLT cho Ruby. Cài thử thư viện selenium-client của Ruby xong, xem tập tin generated_client.rb, sẽ thấy iedoc.xml đã được biến đổi thàh mã nguồn như sau:

# Clicks on a link, button, checkbox or radio button. If the click action
# causes a new page to load (like a link usually does), call
# waitForPageToLoad.
#
# 'locator' is an element locator
def click(locator)
remote_control_command("click", [locator,])
end

# Double clicks on a link, button, checkbox or radio button. If the double click action
# causes a new page to load (like a link usually does), call
# waitForPageToLoad.
#
# 'locator' is an element locator
def double_click(locator)
remote_control_command("doubleClick", [locator,])
end

Như vậy, chúng ta vừa thấy một ứng dụng rất thực tế của XML và XSLT.

XSLT và Erlang

Erlang có thư viện chuẩn xmerl để giải quyết những thứ liên quan đến XML. Ý tưởng của XSLT là dùng cú pháp matching của XPath để khớp phần từ XML với luật biến đổi nào đó. Đây chính là ý tưởng của ngôn ngữ hàm, nhờ đó thư viện xmerl đã được thiết kế theo hướng dễ dùng hơn nhiều so với thư viện của những ngôn ngữ bình thường khác như Java, C/C++.

[còn tiếp]

Tham khảo

Comments

You must login to be able to comment

Uploaded files

No file uploaded yet

You must login to be able to upload

Nhà tài trợ:

Mọi người đều tự do viết bài, sửa bài của người khác, và bình luận ở trang web này. Bạn muốn chủ động tạo bài mới để chia sẻ kinh nghiệm với mọi người? Xin click link ở dưới.

Create new content