Первое решение
Как обещал Джон Чен [владелец - WebDriver для Google Chrome] вчера, были выпущены новые версии ChromeDriver 75.0.3770.90 и 76.0.3809.25 и теперь доступны на сайте ChromeDriver Downloads . Эти версии включают следующие исправления ошибок в предыдущих выпусках ChromeDriver 75 и 76 :
- Исправлена ошибка, из-за которой некорректно отклонялись POST-запросы с пустым телом в режиме OSS
- Добавлены новые конечные точки для извлечения журнала Chrome
Кроме того, версия 76.0.3809.25 также включает следующее изменение:
- Добавлена конечная точка для команды Is Displayed в режиме W3C
Снимок электронной почты
Это будет против лучших практик отключить w3c
в chromedriver для устранения ошибки:
Selenium::WebDriver::Error::UnknownCommandError:
unknown command: Cannot call non W3C standard command while in W3C mode
в качестве текущей реализации ChromeDriver запрашивает W3C-совместимый сеанс для клиента.
Однако из этого сообщения об ошибке следует, что ChromeDriver не смог вызвать стандартную команду не W3C в режиме W3C при запуске / порождении нового Веб-браузер т.е. Браузер Chrome сеанс.
Основная проблема заключается в том, что когда клиент ChromeDriver запрашивает W3C-совместимый сеанс , ответ от ChromeDriver не соответствует спецификации W3C, и вызывает ошибки в языковых API.
Согласно обсуждению в ответ ChromeDriver в режиме W3C не соответствует стандарту Джон Чен (владелец - WebDriver для Google Chrome) упомянул Саймон Стюарт (Creator - WebDriver) обновил это :
Новый ответ сеанса для сеанса w3c должен выглядеть следующим образом:
{
"value": {
"sessionId": "some-uuid",
"capabilities": {
"browserName": "chrome",
...
}
}
}
Но при запуске нового сеанса с параметром w3c
, установленным в true
в chromeOptions , возвращаемый ответ выглядел следующим образом :
{
"sessionId": "af4656c27fb94485b7872e1fc616923a",
"status": "ok",
"value": {
"browserName": "chrome",
...
}
}
Что не является ни правильно сформированным ответом для протокола JSON Wire (где «status» будет целым числом), ни правильно сформированным ответом W3C, и без правильно сформированного ответа нельзя использовать w3c-совместимый.
Эта ревизия и коммит решают эту проблему.
Этот вариант использования
Предположительно, вы используете ChromeDriver v75.x с Chrome v75.x , и если вы все еще видите ошибку, вам нужно передать ExperimentalOption w3c
как true
явно следующим образом:
Ruby Пример кода:
capabilities = { "chromeOptions" => {'w3c' => true} }
Java пример кода:
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
public class W3c {
public static void main(String[] args) throws Exception {
ChromeOptions opt = new ChromeOptions();
opt.setExperimentalOption("w3c", true);
ChromeDriver driver = new ChromeDriver(opt);
driver.get("https://www.google.co.in");
}
}
Python пример кода:
from selenium import webdriver
opt = webdriver.ChromeOptions()
opt.add_experimental_option('w3c', True)
driver = webdriver.Chrome(chrome_options=opt)
driver.get('https://www.google.co.in')
Обновление
До ChromeDriver v74.x , Chrome и ChromDriver Комбо работал по умолчанию в режиме w3c, но была ошибка в chromedriver / сервер / 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 с исправлением.