Обычно мы можем войти в систему с самоподписанным сертификатом с локального хоста, указывающим на другой сервер.
Но во время сквозного тестирования Cypress это терпит неудачу с
(неперехваченное исключение)NotSupportedError: пользовательский агент не поддерживает учетные данные открытого ключа.
Есть ли настройка кипариса для настройки и подавления этой ошибки?
Это наблюдается в основном в среде Chrome, Chromium и Electronic, но также и в браузере Firefox.
cypress : 13.3.0,
mac os sonoma: v14.4.1
chrome : 124.x
Рабочая ссылка в Firefox
Следует ли изменить реализацию ниже:
export default (email, password) => {
if (!window.PasswordCredential) {
return Promise.resolve(false);
}
const cred = new PasswordCredential({
id: email,
password,
name: email,
});
return navigator.credentials.store(cred).then(() => {
return true;
});
};
Согласно документу:
https://developer.mozilla.org/en-US/docs/Web/API/PasswordCredential/PasswordCredential
Я не уверен на 100%, связано ли это с паролемCredential или браузером, который не поддерживает. Как мы можем заглушить это в среде кипариса для Chrome и других неподдерживаемых браузеров?
Браузер Firefox работает абсолютно нормально, а вот Chrome — нет. Я обновил версию узла с 16 до 18 и библиотеку суперагентов до последней, чтобы посмотреть, поможет ли это, но пока безуспешно.
@Chrome Арти — В приложении
Мне было интересно увидеть, что в разделе «Совместимость браузера» документов, на которые вы ссылаетесь, говорится противоположное тому, что вы описали выше.
Вы ищете способ заставить PasswordCredential работать с Chrome или способ использовать самозаверяющий сертификат с localhost?
Да, вручную с Chrome работает, что странно. Но с кипарисом это не работает.
Можете ли вы опубликовать что-то, что мы можем воспроизвести? Возможно, дайте ссылку на репо.





Вариант запуска браузера Chrome -> --use-sha1-server-handshakes
использование вышеуказанной опции браузера может решить вашу проблему
образец:
Спасибо за ответ, но я не понял. Как и где это настроить в драматурге или кипарисе?
@MithunShreevatsa Обновите ответ. Вы должны передать опцию запуска из файла конфигурации (Cypress)
Я попробовал этот вариант запуска с драматургом, например: ``` { name: 'Google Chrome', use: { ...devices['Desktop Chrome'], канал: 'chrome', userAgent: 'Mozilla/5.0 (Macintosh; Intel) Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, например Gecko) Chrome/124.0.0.0 Safari/537.36', bypassCSP: true, launchOptions: { args: ['--disable-web-security', '--use-sha1 -server-handshakes'], }, }, }, ``` Не сработало
Я даже пробовал с кипарисом, там тоже не получилось. `` on('before:browser:launch', (browser = {}, launchOptions) => { console.info('launchOptions => ', launchOptions.args); launchOptions.args.push('--disable-web -security'); launchOptions.args.push('--use-sha1-server-handshakes');``
Эта опция --use-sha1-server-handshakes в Chrome устарела.
Причиной может быть работа кипариса по протоколу HTTP вместо HTTPS.
Согласно документации сказано:
Безопасный контекст: эта функция доступна только в безопасном контексте (HTTPS) в некоторых или во всех поддерживающих браузерах.
Возможно, вы захотите проверить, как использовать действительный сертификат HTTPS при запуске Cypress в разных браузерах.
Посмотрите это https://docs.cypress.io/guides/references/client-certificates
Если у вас есть сертификат защищенного сайта, вы сможете сопоставить этот сайт с localhost в целях тестирования.
Что касается Как локально протестировать HTTPS-сайт, формат в старом стиле cypress.json такой:
{
"baseUrl": "https://my-secure-site:3000",
"hosts": {
"my-secure-site": "127.0.0.1"
}
}
Обратите внимание, что baseUrl использует протокол https, и его домен сопоставлен с 127.0.0.1 или localhost. Это должно остановить возврат браузера к протоколу http.
Поскольку cypress.json — более старый формат, я искал параметр hosts в текущей документации Конфигурация и не смог его найти.
Однако в репозитории Cypress на github есть пример здесь , а у Глеба есть более поздний блог, в котором он используется здесь, так что попробовать стоит.
Где применяется код? В приложении или в тестовой настройке?