Как сохранить элемент хранилища сеанса в переменную

Мне нужно сохранить некоторые элементы из локального хранилища с помощью С# (через js, потому что кажется, что нет решения с «чистым» С#). Я пробовал это (извините за соглашение по коду, я делал это в спешке):


public string token;

string storageToken = "localStorage.getItem('token')";

token = (string)js.ExecuteScript(storageToken);`

Когда я запускаю это, он получает пустую строку для этих элементов. Моя цель — получить элементы локального хранилища, сохранить их в переменных и использовать в другом методе:


string tokenSetItemScript = $"localStorage.setItem('token','{token}')";

js.ExecuteScript(tokenSetItemScript);

Вы должны включить полный код. Я не думаю, что вы сможете получить эти значения, если вы в настоящее время не находитесь в домене, который их установил. С помощью приведенного выше кода невозможно определить, в каком домене вы находитесь. Вероятно, вам также понадобится оператор return в вашем JS, но ответ Алекса ниже кажется немного более элегантным.

pcalkins 21.11.2022 22:36
Как использовать API парсинга квитанций с помощью JavaScript за 5 минут?
Как использовать API парсинга квитанций с помощью JavaScript за 5 минут?
В этом руководстве вы узнаете, как использовать API парсинга квитанций за 5 минут с помощью JavaScript. Eden AI предоставляет простой и удобный для...
Хук useOnClickOutside в ReactJS
Хук useOnClickOutside в ReactJS
Как разработчик ReactJS, вы, возможно, сталкивались с ситуацией, когда вам нужно закрыть модальное или выпадающее меню, когда кто-то щелкает за его...
Хуки (часть-2) - useEffect
Хуки (часть-2) - useEffect
Хук useEffect - один из самых мощных и универсальных инструментов в арсенале разработчика React. Он позволяет вам управлять побочными эффектами в...
Простое руководство по тестированию взаимодействия с пользователем с помощью библиотеки тестирования React
Простое руководство по тестированию взаимодействия с пользователем с помощью библиотеки тестирования React
В предыдущем посте я показал вам на примерах, как писать базовые тесты в React. Важнейшей частью пользовательского интерфейса приложений является...
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
Создайте титры как в звездных войнах с помощью CSS и Javascript
Создайте титры как в звездных войнах с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
1
1
62
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуйте с этим (пример Java, но С# должен быть очень похож):

LocalStorage local = ((WebStorage) driver).getLocalStorage();

Я не думаю, что для С# больше нет эквивалентного интерфейса (или класса) WebStorage. Я нашел это selenium.dev/selenium/docs/api/dotnet/html/… но, насколько я знаю, он отсутствует в последних версиях селена.

ggeorge 22.11.2022 20:54

Спасибо за ваш ответ, но с С# он не работает таким образом

Pascal 23.11.2022 09:05
Ответ принят как подходящий

Используя javascript, вы можете установить элемент или получить элемент из локального хранилища.

public static class WebDriverExtensions
{
    public static void SetItemToLocalStorage(this IWebDriver driver, string key, string value)
    {
        var js = (IJavaScriptExecutor)driver;
        js.ExecuteScript("localStorage.setItem(arguments[0],arguments[1])", key, value);
    }

    public static string GetItemFromLocalStorage(this IWebDriver driver, string key)
    {
        var js = (IJavaScriptExecutor)driver;
        return (string)js.ExecuteScript($"return window.localStorage.getItem('{key}')");
    }
}

А затем используйте эти методы расширения, например:

driver.SetItemToLocalStorage("token", "your-token");
string token = driver.GetItemFromLocalStorage("token")

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