Cypress — (неперехваченное исключение) NotSupportedError: пользовательский агент не поддерживает учетные данные открытого ключа

Обычно мы можем войти в систему с самоподписанным сертификатом с локального хоста, указывающим на другой сервер.

Но во время сквозного тестирования 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 Artie 05.05.2024 22:02

@Chrome Арти — В приложении

Mithun Shreevatsa 06.05.2024 04:47

Мне было интересно увидеть, что в разделе «Совместимость браузера» документов, на которые вы ссылаетесь, говорится противоположное тому, что вы описали выше.

Sudac 06.05.2024 12:29

Вы ищете способ заставить PasswordCredential работать с Chrome или способ использовать самозаверяющий сертификат с localhost?

Sudac 06.05.2024 12:31

Да, вручную с Chrome работает, что странно. Но с кипарисом это не работает.

Mithun Shreevatsa 06.05.2024 18:42

Можете ли вы опубликовать что-то, что мы можем воспроизвести? Возможно, дайте ссылку на репо.

Aladin Spaz 09.05.2024 00:21
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
6
287
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вариант запуска браузера Chrome -> --use-sha1-server-handshakes

использование вышеуказанной опции браузера может решить вашу проблему

образец:

Спасибо за ответ, но я не понял. Как и где это настроить в драматурге или кипарисе?

Mithun Shreevatsa 20.05.2024 18:25

@MithunShreevatsa Обновите ответ. Вы должны передать опцию запуска из файла конфигурации (Cypress)

Madhan Raj 21.05.2024 09:38

Я попробовал этот вариант запуска с драматургом, например: ``` { 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'], }, }, }, ``` Не сработало

Mithun Shreevatsa 22.05.2024 05:37

Я даже пробовал с кипарисом, там тоже не получилось. `` on('before:browser:launch', (browser = {}, launchOptions) => { console.info('launchOptions => ', launchOptions.args); launchOptions.args.push('--disable-web -security'); launchOptions.args.push('--use-sha1-server-handshakes');``

Mithun Shreevatsa 22.05.2024 05:50

Эта опция --use-sha1-server-handshakes в Chrome устарела.

Mithun Shreevatsa 22.05.2024 06:14

Причиной может быть работа кипариса по протоколу 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 есть пример здесь , а у Глеба есть более поздний блог, в котором он используется здесь, так что попробовать стоит.

Другие вопросы по теме