HTML tự động chuẩn hóa khoảng trắng trong các phần tử, bỏ qua các khoảng trắng ở đầu / cuối và chuyển đổi các khoảng trắng, tab và dòng mới thành một khoảng trắng duy nhất. Khi Selenium đọc văn bản ra khỏi trang, nó sẽ cố gắng sao chép hành vi này, vì vậy bạn có thể bỏ qua tất cả các tab và dòng mới trong HTML của mình và thực hiện các xác nhận dựa trên giao diện của văn bản trong trình duyệt khi được hiển thị. Chúng tôi thực hiện việc này bằng cách thay thế tất cả khoảng trắng không hiển thị (bao gồm cả khoảng trắng không ngắt "
") bằng một khoảng trắng duy nhất. Tất cả các dòng mới có thể nhìn thấy ( <br>
, <p>
và <pre>
định dạng dòng mới) cần được bảo tồn.
Chúng tôi sử dụng cùng một logic chuẩn hóa trên văn bản của các bảng trường hợp kiểm tra HTML Selenese. Điều này có một số lợi thế. Đầu tiên, bạn không cần phải nhìn vào nguồn HTML của trang để tìm ra những xác nhận của bạn; Các
ký hiệu "" không hiển thị đối với người dùng cuối và vì vậy bạn không cần phải lo lắng về chúng khi viết các bài kiểm tra Selenese. (Bạn không cần đặt
các điểm đánh dấu "" trong trường hợp thử nghiệm của mình để khẳng định Văn bản trên trường có chứa "
".) Bạn cũng có thể đặt thêm các dòng mới và khoảng trắng trong các <td>
thẻ Selenese của mình
; vì chúng tôi sử dụng cùng một logic chuẩn hóa trên trường hợp thử nghiệm như chúng tôi làm trên văn bản, chúng tôi có thể đảm bảo rằng các xác nhận và văn bản được trích xuất sẽ khớp chính xác.
Điều này tạo ra một chút vấn đề trong những trường hợp hiếm hoi khi bạn thực sự muốn / cần chèn thêm khoảng trắng trong trường hợp thử nghiệm của mình. Ví dụ: bạn có thể cần nhập văn bản vào trường như sau: " foo
". Nhưng nếu bạn chỉ viết <td>foo </td>
trong trường hợp kiểm tra Selenese của mình, chúng tôi sẽ thay thế các khoảng trắng thừa của bạn chỉ bằng một khoảng trắng.
Vấn đề này có một cách giải quyết đơn giản. Chúng tôi đã xác định một biến trong Selenese
${space}
, có giá trị là một khoảng trắng. Bạn có thể sử dụng ${space}
để chèn một không gian đó sẽ không được tự động cắt, như thế này:
<td>foo${space}${space}${space}</td>
. Chúng tôi cũng đã bao gồm một biến
${nbsp}
mà bạn có thể sử dụng để chèn một khoảng trắng không ngắt.
Lưu ý rằng XPath không chuẩn hóa khoảng trắng theo cách chúng ta làm. Nếu bạn cần phải viết một XPath như
//div[text()="hello world"]
nhưng HTML của liên kết thực sự là " hello world
", bạn sẽ cần phải chèn một thực tế "
" vào trường hợp thử nghiệm Selenese của bạn để làm cho nó phù hợp, như thế này:
//div[text()="hello${nbsp}world"]
.