Oficjalne strategie lokalizatora dla webdrivera
W oficjalnej dokumentacji webdirvera W3c jest jasno określone, że strategie lokalizacji to:
State Keyword
CSS selector "css selector"
Link text selector "link text"
Partial link text selector "partial link text"
Tag name "tag name"
XPath selector "xpath"
Jednak protokół przewodowy Selenium pozwolił:
class name
css selector
id
name
link text
partial link text
tag name
xpath
W TEORII dokumenty Selenium są przestarzałe, a „prawdziwa” historia znajduje się w nowym dokumencie specyfikacji. Jednak...
Przeprowadziłem kilka testów na najnowszym Webdriverze Chrome i mogę to potwierdzić name
i class name
oba działają; jednak nie ma ich w specyfikacji.
Pamiętam, jak czytałem w sprawie Chromium, że kiedykolwiek wdrożyliby tylko oficjalne specyfikacje Webdrivera.
Teraz: znam ogólną odpowiedź, gdzie „specyfikacje nie zawsze są przestrzegane w 100%” itp. Chciałbym jednak wiedzieć:
- Czy możesz znaleźć kod w Chromium, który to implementuje? (link byłby mile widziany)
- Czy były jakieś dyskusje na ten temat na liście mailingowej Chromium?
- Czy „nieoficjalne” polecenia (które są udokumentowane w „starym” pliku specyfikacji selenu) prawdopodobnie pozostaną? Gdzie tak przeczytałeś?
Odpowiedzi
Tak, dobrze to widziałeś.
Jak na prąd Powołany przedstawiają się następująco:WebDriver - W3C Candidate Recommendation
Locator Strategies
"css selector"
: Selektor CSS"link text"
: Selektor tekstu linku"partial link text"
: Częściowy selektor tekstu linku"tag name"
: Nazwa znacznika"xpath"
: Selektor XPath
Migawka:
Jednak JsonWireProtocol
był kiedyś używany do wsparcia Strategie Locator zaciągnął poniżej, ale obecnie dokumentacja wyraźnie stwierdza, że to status jako OBSOLETE :
class name
: Zwraca element, którego nazwa klasy zawiera wartość wyszukiwania; nazwy klas złożonych nie są dozwolone.css selector
: Zwraca element pasujący do selektora CSS.id
: Zwraca element, którego atrybut ID odpowiada wyszukiwanej wartości.name
: Zwraca element, którego atrybut NAME jest zgodny z wyszukiwaną wartością.link text
: Zwraca element zakotwiczenia, którego widoczny tekst odpowiada wyszukiwanej wartości.partial link text
: Zwraca element zakotwiczenia, którego widoczny tekst jest częściowo zgodny z wyszukiwaną wartością.tag name
: Zwraca element, którego nazwa znacznika jest zgodna z wartością wyszukiwania.xpath
: Zwraca element pasujący do wyrażenia XPath. Podane wyrażenie XPath należy zastosować na serwerze „tak jak jest”; jeśli wyrażenie nie jest względne w stosunku do elementu głównego, serwer nie powinien go modyfikować. W konsekwencji kwerenda XPath może zwrócić elementy, które nie są zawarte w poddrzewie elementu głównego.
Migawka:
Zmiana została propagowana za pośrednictwem odpowiednich powiązań specyficznych dla klienta . Dla Selenium-Java
klientów tutaj jest kod klienta, w którym mamy przełącznik działający dla użytkowników:
switch (using) {
case "class name":
toReturn.put("using", "css selector");
toReturn.put("value", "." + cssEscape(value));
break;
case "id":
toReturn.put("using", "css selector");
toReturn.put("value", "#" + cssEscape(value));
break;
case "link text":
// Do nothing
break;
case "name":
toReturn.put("using", "css selector");
toReturn.put("value", "*[name='" + value + "']");
break;
case "partial link text":
// Do nothing
break;
case "tag name":
toReturn.put("using", "css selector");
toReturn.put("value", cssEscape(value));
break;
case "xpath":
// Do nothing
break;
}
return toReturn;
Migawka:
Teraz twoje pytanie musi brzmieć, dlaczego ta zmiana w W3C Specs
i w clients
. Zgodnie z # 1042, odpowiedź od współtwórców WebDriver była dość prosta:
This keeps the specification simple as these can be implemented using the CSS selector, which maps down to querySelector/querySelectorAll.