Есть ли способ передать токен JWT для аутентификации в Selenium WebDriver в C # Asp.net Ядро?

#c# #selenium #selenium-webdriver #asp.net-core-webapi #asp.net-core-2.2

#c# #селен #selenium-webdriver #asp.net-core-webapi #asp.net-core-2.2

Вопрос:

Мне нужен способ аутентификации в моей автоматизации WebAPI. Я извлек токен-носитель и передал свой json в объект .net, как мне передать токен JWT / Bearer и ввести необходимые заголовки в сеанс ChromeDriver при его открытии, поэтому, когда мое приложение переходит к https://localhost:5000/login он должен автоматически перенаправляться на -> https://localhost:5000/Dashboard .

 class Program
{

    //private static IWebDriver driver;

    // ******->Selenium Specific Code<-******
    // Instantiate the Chrome Driver
    var driver = new ChromeDriver("/usr/local/bin/");

    static IJavaScriptExecutor jsDriver = driver as IJavaScriptExecutor;

    public static string setItemInLocalStorage(string item, string value)
    {


        var js = ((IJavaScriptExecutor)driver).ExecuteScript(String.Format(
         "window.localStorage.setItem('userDetails','"   value   "');"));

        return "";

    }

    //Method to Authenticate amp; GET Bearer Token from API.

    public static async void GetAllWorkshopData(int WorkshopId)
    {
        UserAuth ua = new UserAuth();
        ua.EmailAddress = "example@mail.com";
        ua.Password = "Strongest!!!Pwd";
        ua.WorkshopId = WorkshopId;

        using (var client = new HttpClient())
        {

            var uri = "https://localhost:5001/api/userauth/Login";
            string json = JsonConvert.SerializeObject(ua);
            StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
            var res = await client.PostAsync(uri, content);
            string datar = await res.Content.ReadAsStringAsync();

            Example details = JsonConvert.DeserializeObject<Example>(datar);



            
            // Navigate to the Endpoint
            ///here inject basic-auth token before selenium opens browser

            driver.Navigate().GoToUrl("http://localhost:5000/Login");
          

            setItemInLocalStorage("", datar);

            driver.Navigate().GoToUrl("http://localhost:5000/Dashboard");
        } 
  

Ответ №1:

Здесь вы можете использовать исполнителей javascript. Ниже приведен пример, который вы можете использовать для настройки сеанса, файлов cookie и т. Д

  IJavaScriptExecutor js = _driver as IJavaScriptExecutor;
                    
 driver.Navigate().GoToUrl("http://localhost:5000/Login");

 js.ExecuteScript("window.sessionStorage.setItem('token', 'your access token')");