này sẽ cung cấp tất cả các yếu tố có chứa văn bản foobar
driver.findElement(By.xpath("//*[text()[contains(.,'foobar')]]"));
Nếu bạn muốn kết hợp chính xác,
driver.findElement(By.xpath("//*[text() = 'foobar']"));
Hoặc bạn có thể thực thi Javascript sử dụng JQuery trong Selenium
này sẽ trả lại tất cả các yếu tố web có chứa văn bản từ cha mẹ đến đứa con cuối cùng, do đó tôi đang sử dụng công cụ chọn jquery :last
để tận dụng tối đa nút có chứa văn bản này, nhưng điều này có thể không phải lúc nào cũng chính xác, nếu bạn có nhiều nút chứa cùng một văn bản.
(WebElement)((JavascriptExecutor)driver).executeScript("return $(\":contains('foobar'):last\").get(0);");
Nếu bạn muốn kết hợp chính xác cho ở trên, bạn cần phải chạy một bộ lọc trên các kết quả,
(WebElement)((JavascriptExecutor)driver).executeScript("return $(\":contains('foobar')\").filter(function() {" +
"return $(this).text().trim() === 'foobar'}).get(0);");
jQuery trả về một mảng các yếu tố, nếu bạn chỉ có một yếu tố web trên trang với văn bản cụ thể đó, bạn sẽ nhận được một mảng của một phần tử. Tôi đang làm .get(0)
để lấy yếu tố đầu tiên đó của mảng và đưa nó vào một số WebElement
Hy vọng điều này sẽ hữu ích.
Tôi không nghĩ như vậy, nhưng một cái gì đó có thể giúp bạn đi đến một câu trả lời dứt khoát hơn là [ở đây] (http://codebeautify.org/ Xpath-Tester). –
Thậm chí còn có ít nhất một cách để ký tự đại diện chỉ là phần thuộc tính cụ thể (như chuyển @title thành bất kỳ thuộc tính nào) nhưng để lại văn bản()? – user2150250
Bạn có thể cho chúng tôi biết tại sao bạn muốn làm điều này không? Bạn đang sử dụng cái này như thế nào? – JeffC