Używam XPather Browser sprawdzić moje wyrażeń XPath na stronie HTML.
Moim końcowym celem jest użycie tych wyrażeń w Selenium do testowania moich interfejsów użytkownika.
Mam plik HTML o treści podobnej do tej:
<tr> <td> abc </td> <td> & nbsp; </td> </tr>
Chcę wybrać węzeł z tekstem zawierającym ciąg „
”.
Z normalnym ciągiem znaków, takim jak „abc”, nie ma problemu. Używam XPATH podobnego do //td[text()="abc"]
.
Kiedy próbuję z XPATH, jak //td[text()=" "]
nic nie zwraca. Czy istnieje specjalna zasada dotycząca tekstów ze znakiem „ &
”?
Odpowiedzi:
Wygląda na to, że OpenQA , twórcy Selenium, już rozwiązali ten problem. Zdefiniowali pewne zmienne, aby wyraźnie dopasować białe spacje. W moim przypadku muszę użyć XPATH podobnego do
//td[text()="${nbsp}"]
.Przedstawiłem tutaj tekst z OpenQA dotyczący tego problemu (znaleziony tutaj ):
źródło
\u00a0
. To, co zadziałało, to wpisanie nieprzerwanej spacji na MacuAlt+Shift+Space
. Wyszukiwanie w sieci mówiAlt+0160
w systemie WindowsZauważyłem, że mogę dopasować, kiedy wprowadzam zakodowaną na stałe niezłamującą spację (U + 00A0), wpisując Alt + 0160 w systemie Windows między dwoma cudzysłowami ...
pracował dla mnie ze specjalnym char.
Z tego, co zrozumiałem, standard XPath 1.0 nie obsługuje ucieczki znaków Unicode. Wygląda na to, że w XPath 2.0 są funkcje do tego, ale wygląda na to, że Firefox ich nie obsługuje (albo coś źle zrozumiałem). Musisz więc zrobić z lokalną stroną kodową. Brzydkie, wiem.
Właściwie wygląda na to, że standard opiera się na języku programowania używającym XPath, aby zapewnić prawidłową sekwencję ucieczki Unicode ... Więc jakoś postąpiłem właściwie.
źródło
$col = $xpath->query("//p[text()=\"\xC2\xA0\"]");
Spróbuj użyć jednostki dziesiętnej
 
zamiast nazwanej jednostki. Jeśli to nie zadziała, powinieneś być w stanie po prostu użyć znaku Unicode dla nierozdzielającej spacji zamiast
jednostki.(Uwaga: nie próbowałem tego w XPather, ale wypróbowałem to w Oxygen).
źródło
Należy pamiętać, że procesor XML zgodnych ze standardami będzie zastąpiły żadnych odniesień podmiotu innego niż XML standardowych pięciu z nich (
&
,>
,<
,'
,"
) z odpowiednim znaku w kodowaniu docelowym do czasu wyrażenia XPath są oceniane. Biorąc pod uwagę to zachowanie, sugestie PhiLho i jsulak są drogą do zrobienia, jeśli chcesz pracować z narzędziami XML. Po wprowadzeniu 
wyrażenia XPath należy je przekonwertować na odpowiednią sekwencję bajtów przed zastosowaniem wyrażenia XPath.źródło
Zgodnie z podanym kodem HTML:
Aby zlokalizować węzeł za pomocą ciągu
, możesz użyć jednego z poniższychxpath rozwiązania oparte na:Używając
text()
:Używając
contains()
:Najlepiej jednak byłoby uniknąć znaku BEZ PRZERWY SPACJI i użyć jednej z następujących strategii lokalizacji :
Korzystanie z
<tr>
węzła nadrzędnego ifollowing-sibling
:Używając
starts-with()
:Korzystanie z poprzedzającego
<td>
węzła ifollowing
node and
następującego-rodzeństwa ":Odniesienie
Odpowiednie szczegółowe omówienie można znaleźć w:
selentl; dr
Znak Unicode „SPACJA BEZ PRZERW” (U + 00A0)
źródło
Nie mogę znaleźć dopasowania za pomocą Xpather, ale poniższe działały dla mnie ze zwykłymi plikami XML i XSL w Notatniku XML firmy Microsoft:
Zwracana wartość to 1, co jest poprawną wartością w moim przypadku testowym.
Jednak musiałem zadeklarować nbsp jako jednostkę w moim XML i XSL, używając następującego:
Nie jestem pewien, czy to pomaga, ale udało mi się rzeczywiście znaleźć nbsp za pomocą wyrażenia XPath.
Edycja: mój przykładowy kod w rzeczywistości zawiera znaki „& nbsp;” ale podświetlanie składni JavaScript konwertuje go na znak spacji. Nie daj się zwieść!
źródło
Wyszukaj
czy tylkonbsp
- próbowałeś tego?źródło
Możesz użyć funkcji XPath Contains, Sibling, Ancestor w Selenium WebDriver, aby zlokalizować elementy, które nie mają żadnych unikalnych właściwości, aby je zidentyfikować.
aby uzyskać więcej informacji, przeczytaj tę stronę: https://www.guru99.com/using-contains-sbiling-ancestor-to-find-element-in-selenium.html
źródło