Article:
Selenium với Erlang, hay câu chuyện về XML và XSLT
961
ngocdaothanh.myopenid.com 149Updated 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:
- 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.
- 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]
149

