2013-11-01 15 views
6

Tôi cần một chút trợ giúp về tìm kiếm văn bản chính xác bằng cách sử dụng xpath trong webDriver.Cách tìm kiếm nút bằng kết hợp văn bản chính xác bằng Xpath trong webdriver

Giả sử tôi có html như sau ..

<html><body> 
    <table> 
    <tr> 
     <td><button>abcd</button></td> 
     <td><button>abc</button></td> 
    </tr> 
    </table> 
</body></html> 

Bây giờ tôi muốn bấm vào nút "abc"

tôi đã sử dụng xpath như //button[contains(text(),'abc')] nhưng nó luôn luôn thực hiện vào nút "abcd" vì nó cũng chứa văn bản "abc". Về vấn đề này, tôi cần một vị từ hoặc một số thủ tục khác có thể tìm kiếm văn bản chính xác thay vì chứa văn bản.

Tôi cũng đã thử với //button[matches(text(),'abc')], //button[matches($string,'abc')], //button[Text='abc')], //button[.='abc')] và nhiều hơn nữa nhưng không có cách nào trong số này được xác định để xác định nút "abc".

Tôi không biết nếu có bất kỳ vấn đề nào liên quan đến phiên bản xpath của tôi vì tôi không biết phiên bản. Nhưng tôi đang sử dụng java 1.6 JDK.

Mặc dù kịch bản chính xác của tôi không phải là ví dụ được hiển thị nhưng logic tương tự cần được áp dụng.

Do đó mọi trợ giúp hoặc đề xuất sẽ được đánh giá cao.

+3

Tôi không hiểu ... có gì sai với tìm kiếm ** bằng **? ... '// nút [text() = 'abc']' ....? – Arran

+1

@Arrana trông giống như sai là nút // // [Text = 'abc'] 'nhưng nút bên phải là nút // // [Text() = 'abc']' (như bạn đã viết) – olyv

+0

Có quyền tuyệt đối của nó. ... nó sẽ là một cái gì đó giống như một tìm kiếm bình đẳng ... // nút [text() = 'abc'] xpath này hoạt động đúng ... cảm ơn rất nhiều. – souvik

Trả lời

0

Hãy thử kết thúc bằng thay vì chứa. Nếu các nút không có thuộc tính duy nhất, bạn cũng có thể thêm phân cấp gốc. Giống như // table/tr/td [1].

+0

thanx cho bình luận ur, cho tôi biết một điều, html chứa không gian hàng đầu và dấu chấm cho văn bản. như "abcd" và "abc". Nếu tôi sử dụng [contains (text(), 'abc')] xpath thì nó thực hiện trên nút "abcd". nhưng nếu tôi đang sử dụng [start-with (text(), 'abc') hoặc [ends-with (text(), 'abc'), nó hiển thị không thể tìm thấy locator.the không gian tôi đã đề cập trong xpath hàng đầu hoặc trailing đến chuỗi là chính xác ?? Và thứ hai là "td" số không cố định trong trường hợp của tôi. nút có thể chứa bất kỳ td nào trong bảng. infact trong một số thẻ tr khác cũng như thế hệ nút là năng động. Do đó tôi không thể đi theo phân cấp. – souvik

+0

Không thể nói mà không cần truy cập vào ứng dụng nhưng bạn có thể làm điều đó quanh vòng bằng cách nhận giá trị thuộc tính văn bản và thực hiện so sánh chuỗi bằng cách sử dụng các hàm ngôn ngữ. – Akbar

+0

Element.getattribute ("văn bản") – Akbar

19

Tôi sẽ sử dụng xpath tiếp theo //button[text()='abc']. Bạn đã đề cập đến chức năng text() nhưng tôi không chắc cú pháp là chính xác. Ngoài ra bạn đã cố gắng sử dụng - nó tìm kiếm một phần văn bản và WebDriver được tìm thấy phần tử đầu tiên. Trường hợp của bạn là <button>abcd</button> nút

+0

Làm việc như một sự quyến rũ. Cảm ơn. – MansoorShaikh

+0

@MansoorShaikh cảm ơn, rất vui được biết :) – olyv

Các vấn đề liên quan