Это сообщение об ошибке ...
unknown command: Cannot call non W3C standard command while in W3C mode (Selenium::WebDriver::Error::UnknownCommandError)
... означает, что ChromeDriver не смог вызвать не стандартную команду W3C в режиме Режим W3C при запуске / порождении нового WebBrowser т.е. Браузер Chrome сеанс.
Здесь основная проблема возникает, когда ChromeDriver 'Клиент s запрашивает W3C-совместимый сеанс , но ответ от ChromeDriver не соответствует спецификации W3C и вызывает ошибки в языковых API.
Анализ
Согласно обсуждению в Ответ ChromeDriver в режиме W3C не соответствует стандарту Джон Чен (владелец - WebDriver для Google Chrome) упомянул что Саймон Стюарт (Создатель -WebDriver) обновил:
Новый ответ сеанса для сеанса w3c должен выглядеть следующим образом:
{
"value": {
"sessionId": "some-uuid",
"capabilities": {
"browserName": "chrome",
...
}
}
}
Но при запуске новогосеанс с параметром w3c
, установленным на true
в chromeOptions следующим образом:
Селен / Python:
from selenium import webdriver
opt = webdriver.ChromeOptions()
opt.add_experimental_option('w3c', True)
driver = webdriver.Chrome(chrome_options=opt)
Селен / Java:
{
"sessionId": "af4656c27fb94485b7872e1fc616923a",
"status": "ok",
"value": {
"browserName": "chrome",
...
}
}
Возвращенный ответ выглядит следующим образом:
{
"sessionId": "af4656c27fb94485b7872e1fc616923a",
"status": "ok",
"value": {
"browserName": "chrome",
...
}
}
Что не является правильно сформированным ответом для протокола JSON Wire (где «status»)не может быть целым числом), ни правильно сформированным ответом W3C, и без правильно сформированного ответа нельзя использовать w3c-совместимый.
1080 * Эта
ревизия и
коммит решают эту проблему.
Этот сценарий использования
Поскольку вы используете ChromeDriver v75.x и Chrome v75.x , и вы все еще видите ту же ошибку, вам нужно передать ExperimentalOption w3c
как true
исключительно следующим образом:
capabilities = { "chromeOptions" => {'w3c' => true} }
Обновление
До ChromeDriver v74.x , Chrome и ChromDriver Комбо работал по умолчанию в режиме w3c, но была ошибка в chromedriver / server / http_handler.cc .Согласно сведениям в goog: chromeOptions.w3c = false не работает для запроса POST с пустым телом :
Метод HttpHandler::HandleCommand
проверяет значение kW3CDefault
константа вместо значения сеанса goog:chromeOptions.w3c
.В результате была нарушена поддержка протокола JSON Wire, где разрешены запросы POST с пустым телом.Протокол JSON Wire будет востребован до тех пор, пока конечная точка displayed
не будет возобновлена в режиме w3c.Следует отметить, что спецификация W3C WebDriver не запрещает использование «отображаемой» конечной точки, и эта функция активно используется в некоторых API.
Поскольку команда Is Element Displayed
не является частью спецификации W3C,но все еще используется некоторыми API, и его функциональность может быть трудно воспроизвести в этих API.При этом Список изменений [ ревизия и commit ] повторно включает эту команду в режиме W3C для упрощения перехода в режим W3C.
@ John haveуже подтвердили, что мы ожидаем обновления до ChromeDriver v75.0 завтра с исправлением.
Вот решение
Как и обещал Джон Чен [Владелец - WebDriverдля Google Chrome], ChromeDriver версии 75.0.3770.90 и 76.0.3809.25 были выпущены и теперь доступны в Загрузках ChromeDriver сайт.Эти версии включают следующие исправления ошибок по сравнению с предыдущими выпусками ChromeDriver 75 и 76 :
- Исправлена ошибка, которая некорректно отклонялаPOST-запросы с пустым телом в режиме OSS
- Добавлены новые конечные точки для получения журнала Chrome
Кроме того, версия 76.0.3809.25 также включает следующее изменение:
- Добавлена конечная точка для команды Is Displayed в режиме W3C
Снимок