Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

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

csharp
chrome
webdriver
selenium
Теги: #<Tag:0x00007fedc461d000> #<Tag:0x00007fedc461cec0> #<Tag:0x00007fedc461cd30> #<Tag:0x00007fedc461cb78>

(Valerash “Valerash”) #1

Добрый день, у меня такая проблема, я пишу на 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());
        }

(Alexandr D ) #2
  1. Новый хром открывается не в методе GoToUrl(string value), а в строке var driver = new ChromeDriver(new ChromeOptions());
    Каждый вызов new ChromeDriver создаёт новый chromedriver и новый браузер.

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

  1. Более популярный и, на мой взгляд, правильный вариант - вынести логику создания/закрытия браузера в фабрику, а методы из неё поместить в [Setup]/[TearDown] базового класса тестов.
    Каждый тест будет создавать собственный браузер и после закрывать его.
    Так ваши тесты будут независимыми от наличия браузера в момент их запуска.

(Valerash “Valerash”) #4

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


(Alexandr D ) #5

Строка

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

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

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

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

Либо

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

Selenium не копируется текст (Выводит NULL) Chrome C#