Selenium не открывается новая вкладка и не копируется текст Chrome C#

Добрый день, у меня такая проблема, я пишу на C# программу, работающую с Chrome. Но есть проблемы :

  1. Текст не копируется. Копируется только “NULL”
  2. Открывается новый браузер и только в нем все происходит. Можно ли как-то продолжить действия в уже открытом браузере? Может это работает через “driver.SwitchTo().Window(driver.WindowHandles.First());”?
var driver = new ChromeDriver(new ChromeOptions());
driver.Navigate().GoToUrl("https://www.google.com/");//НЕ СМОТРЯ НИ НА ЧТО ОТКРЫВАЕТ НОВЫЙ ХРОМ
driver.Manage().Window.Maximize();
 driver.SwitchTo().Window(driver.WindowHandles.Last());
            OpenNewTab();
            driver.SwitchTo().Window(driver.WindowHandles.First());
driver.FindElement(By.ClassName("gsfi")).SendKeys("Selenium"); //Нахожу строку поиска Google и вписываю "Selenium"
string str = driver.FindElement(By.Name("q")).GetAttribute(Text); //str получает "null", хотя в строке записано "Selenium"
label1.Text = str; //Выводит НИЧЕГО(NULL)

Буду признателен за помощь)

Так, я Сделал метод, который открывает новую вкладку, но этот метод открывает сначала браузер Хром(ещё один), и только там потом открывает вторую вкладку

        public static void OpenNewTab()
        {
            var driver = new ChromeDriver();
            driver.ExecuteScript("window.open('about: blank', '_blank');");//РАБОТАЕТ, ОТКРЫВАЕТ НОВУЮ ВКЛАДКУ, ЕЕЕЕЕЕЕ
            driver.SwitchTo().Window(driver.WindowHandles.First());
        }
  1. Новый хром открывается не в методе GoToUrl(string value), а в строке var driver = new ChromeDriver(new ChromeOptions());
    Каждый вызов new ChromeDriver создаёт новый chromedriver и новый браузер.

Если вы хотите иметь один браузер на кучу тестов, то варианта два:

  • Вынести запуск и закрытие браузера в precondition в TestFixture, а не в тестах.
  • Аттачиться к существующей сессии, например так Can Selenium interact with an existing browser session? - Stack Overflow (в гугле много ссылок, но все эти варианты - костыли)
  1. Более популярный и, на мой взгляд, правильный вариант - вынести логику создания/закрытия браузера в фабрику, а методы из неё поместить в [Setup]/[TearDown] базового класса тестов.
    Каждый тест будет создавать собственный браузер и после закрывать его.
    Так ваши тесты будут независимыми от наличия браузера в момент их запуска.
1 лайк

Благодарю за ответ, но что по поводу моего первого вопроса про “NULL”.

Строка

label1.Text = str; //Выводит НИЧЕГО(NULL)

означает, что вы пытаетесь у объекта, на который ссылается переменная label1 установить значение Text равное str.
Это не копирование.

Попробуйте так:

string str = driver.FindElement(By.Name("q")).GetAttribute("value");

Либо

string str = driver.FindElement(By.Name("q")).Text;
1 лайк