Wszystko zależy od tego, co twój HTML rzeczywiście zawiera, ale twój tr[contains(.,'hello')]/td
selektor XPath oznacza „pierwszą komórkę z pierwszego rzędu, który zawiera ciąg«Hello»w dowolnym miejscu to” (lub, bardziej precyzyjnie, "pierwszy element TD w elemencie TR, który zawiera ciąg "hello" w dowolnym miejscu w nim ", ponieważ Selenium nie ma pojęcia, co naprawdę robią elementy). Właśnie dlatego otrzymuje zły wynik, gdy wiersze zawierają "hello" i "hello1" - oba zawierają "hello".
Selektor tr[. ='hello']/td
byłby bardziej dokładne, ale to trochę nietypowe (bo elementy HTML TR nie mają zawierać tekst - tekst ma być w TH lub elementów TD obrębie TR), a to prawdopodobnie wygrał nie działa (ponieważ tekst w dowolnych innych komórkach przerwałby porównanie). Prawdopodobnie chcesztr[td[.='hello']]/td
, co oznacza "pierwszy element TD zawarty w elemencie TR, który zawiera element TD, który ma ciąg" hello "jako pełny tekst".
Co masz na myśli mówiąc "nie działa prawidłowo"? Jakie jest nieoczekiwane zachowanie? –
jeśli mamy dwa elementy z tekstem hello i hello1, a kiedy używamy zawiera (., 'Hello'), ta metoda zawsze będzie wyglądała na cześć. Problem, jeśli te elementy znajdują się w tabeli, a hello1 jest pierwszym elementem, a hello jest drugim, a gdy użyjemy hello, to zawsze wskaże hello1, ponieważ jest to pierwszy element i zawiera hello, ale chcemy przeszukać to, dlaczego potrzebuję dokładnego dopasuj metodę –