Официальные стратегии поиска для вебдрайвера
В официальной документации W3c о веб-драйверах четко указано, что стратегии определения местоположения:
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"
Однако проводной протокол Selenium позволил:
class name
css selector
id
name
link text
partial link text
tag name
xpath
В ТЕОРИИ документы Selenium устарели, а "настоящая" история - в новой спецификации. Тем не мение...
Я провел несколько тестов на новейшем веб-драйвере Chrome и могу подтвердить, что name
а также class name
обе работы; Однако они не в спецификации.
Я помню, как читал о проблеме Chromium, что они будут реализовывать только официальные спецификации Webdriver.
Теперь: я знаю общий ответ, где "спецификации не всегда соблюдаются на 100%" и т. Д. Однако я хотел бы знать следующее:
- Можете ли вы найти код в Chromium, который реализует это? (ссылка будет приветствоваться)
- Были ли обсуждения по этому поводу в списке рассылки Chromium?
- Вероятно ли останутся "неофициальные" команды (которые описаны в "старом" файле селеновых спецификаций)? Где ты так прочитал?
2 ответа
Да, вы видели это правильно.
По текущему WebDriver - W3C Candidate Recommendation
Locator Strategies
зачисляются в следующем:
"css selector"
: CSS селектор"link text"
: Селектор текста ссылки"partial link text"
: Селектор текста частичной ссылки"tag name"
: Название тэга"xpath"
: XPath селектор
Снимок:
Тем не менее JsonWireProtocol
Когда-то использовался для поддержки Стратегий локаторов, перечисленных ниже, но в настоящее время в документации четко указано, что это статус OBSOLETE:
class name
: Возвращает элемент, имя класса которого содержит искомое значение; составные имена классов не допускаются.css selector
Возвращает элемент, соответствующий селектору CSS.id
Возвращает элемент, чей атрибут ID совпадает со значением поиска.name
Возвращает элемент, атрибут NAME которого соответствует поисковому значению.link text
Возвращает элемент привязки, видимый текст которого соответствует поисковому значению.partial link text
Возвращает элемент привязки, видимый текст которого частично соответствует поисковому значению.tag name
Возвращает элемент, имя тега которого соответствует поисковому значению.xpath
Возвращает элемент, соответствующий выражению XPath. Предоставленное выражение XPath должно быть применено к серверу "как есть"; если выражение не относится к корневому элементу, сервер не должен его изменять. Следовательно, запрос XPath может возвращать элементы, не содержащиеся в поддереве корневого элемента.
Снимок:
Изменение было распространено через соответствующие клиентские привязки. Для Selenium-Java
клиенты вот код клиента, где у нас есть коммутатор, работающий для пользователей:
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;
Снимок:
Теперь ваш вопрос должен быть, почему это изменение в W3C Specs
и в clients
, Согласно #1042, ответ от участников WebDriver был довольно прямым:
This keeps the specification simple as these can be implemented using the CSS selector, which maps down to querySelector/querySelectorAll.