Dưới đây là một số phương pháp thay thế cho Selenium RC. Đây không phải là giải pháp Selenium thuần túy, chúng cho phép tương tác với cấu trúc dữ liệu ngôn ngữ lập trình của bạn và Selenium.
Bạn cũng có thể lấy nguồn trang HTML, sau đó biểu thức chính quy nguồn để trả lại một tập hợp các liên kết phù hợp. Sử dụng nhóm regex để tách các URL, liên kết văn bản/ID, v.v. và sau đó bạn có thể chuyển chúng trở lại selen để bấm vào hoặc điều hướng đến.
Phương pháp khác là lấy nguồn trang HTML hoặc innerHTML (thông qua trình định vị DOM) của phần tử gốc/gốc sau đó chuyển HTML thành XML thành đối tượng DOM trong ngôn ngữ lập trình của bạn. Sau đó, bạn có thể duyệt DOM với XPath mong muốn (với biểu thức chính quy hay không), và thu được một nút của chỉ các liên kết quan tâm. Từ phân tích cú pháp của chúng ra văn bản/ID liên kết hoặc URL và bạn có thể quay lại selen để nhấp vào hoặc điều hướng đến.
Khi có yêu cầu, tôi đang cung cấp các ví dụ bên dưới. Đó là ngôn ngữ hỗn hợp vì bài đăng dường như không phải là ngôn ngữ cụ thể. Tôi chỉ sử dụng những gì tôi đã có sẵn để hack với nhau cho các ví dụ. Chúng không hoàn toàn được thử nghiệm hoặc thử nghiệm, nhưng tôi đã làm việc với các bit của mã trước đó trong các dự án khác, vì vậy đây là bằng chứng về các ví dụ về mã khái niệm về cách bạn triển khai các giải pháp mà tôi vừa đề cập.
//Example of element attribute processing by page source and regex (in PHP)
$pgSrc = $sel->getPageSource();
//simple hyperlink extraction via regex below, replace with better regex pattern as desired
preg_match_all("/<a.+href=\"(.+)\"/",$pgSrc,$matches,PREG_PATTERN_ORDER);
//$matches is a 2D array, $matches[0] is array of whole string matched, $matches[1] is array of what's in parenthesis
//you either get an array of all matched link URL values in parenthesis capture group or an empty array
$links = count($matches) >= 2 ? $matches[1] : array();
//now do as you wish, iterating over all link URLs
//NOTE: these are URLs only, not actual hyperlink elements
//Example of XML DOM parsing with Selenium RC (in Java)
String locator = "id=someElement";
String htmlSrcSubset = sel.getEval("this.browserbot.findElement(\""+locator+"\").innerHTML");
//using JSoup XML parser library for Java, see jsoup.org
Document doc = Jsoup.parse(htmlSrcSubset);
/* once you have this document object, can then manipulate & traverse
it as an XML/HTML node tree. I'm not going to go into details on this
as you'd need to know XML DOM traversal and XPath (not just for finding locators).
But this tutorial URL will give you some ideas:
http://jsoup.org/cookbook/extracting-data/dom-navigation
the example there seems to indicate first getting the element/node defined
by content tag within the "document" or source, then from there get all
hyperlink elements/nodes and then traverse that as a list/array, doing
whatever you want with an object oriented approach for each element in
the array. Each element is an XML node with properties. If you study it,
you'd find this approach gives you the power/access that WebDriver/Selenium 2
now gives you with WebElements but the example here is what you can do in
Selenium RC to get similar WebElement kind of capability
*/
Vì vậy, những gì không hoạt động và theo cách nào nó không hoạt động? Bạn có thể đăng HTML (hoặc một đoạn của nó) mà bạn đang so khớp không? –
@Paul, ví dụ và phương thức get_attribute() chỉ trả về một mục duy nhất, không phải danh sách. Poster là yêu cầu những gì tương đương cho việc trả về một danh sách các thuộc tính chẳng hạn. – David