jsperf.com/getelementbyid-vs-queryselector

циальная документация по 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

Я провел несколько тестов на новейшем веб-драйвере Chrome и могу подтвердить, что

 а такжеname обе работы; однако, они не в спецификациях.class nameЯ помню, как читал о проблеме Chromium, что они будут реализовывать только официальные спецификации Webdriver.

Сейчас я

знать общий ответ, где «спецификации не всегда соблюдаются на 100%» и т. д. Однако я хотел бы знать следующее:Можете ли вы найти код в Chromium, который реализует это? (ссылка будет приветствоваться)

Были ли обсуждения по этому поводу в списке рассылки Chromium?Могут ли остаться «неофициальные» команды (которые описаны в «старом» файле спецификации селеном)? Где ты так прочитал?Код драйвера Chrome находится где-то внутри этих ссылок на странице -
 Grasshopper21 янв. 2018 г., 20:24

Ответы на вопрос(1)

Решение Вопроса

 WebDriver - W3C Candidate Recommendation зачисляются в следующем:Locator Strategies : CSS селектор

"css selector" : Селектор текста ссылки"link text" : Селектор текста частичной ссылки"partial link text" : Название тэга"tag name" : XPath селектор"xpath"Снимок:

Однако

 когда-то использовался для поддержкиJsonWireProtocolСтратегии Локатора зачислен ниже, но в настоящее время в документации четко указано, что этоСтатус какИСП : Возвращает элемент, имя класса которого содержит искомое значение; составные имена классов не допускаются. :

class name Возвращает элемент, соответствующий селектору CSS.css selector Возвращает элемент, чей атрибут 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 было довольно прямо как:Сравнивая getElementById и querySelector, я обнаружил, что getElementById работает быстро. Я действительно не понимаю, почему идентификатор локатора устарел. Пожалуйста, проверьте:

This keeps the specification simple as these can be implemented using the CSS selector, which maps down to querySelector/querySelectorAll.

 Purendra Agrawal24 июл. 2018 г., 18:36

Ваш ответ на вопрос