Перейти к содержимому

Selenium WebDriver: полное руководство
онлайн, начало 19 октября
Логи как инструмент тестировщика
онлайн, начало 22 октября
Первый Онлайн ИНститут Тестировщиков
онлайн, начало 15 октября
Тестирование REST API
онлайн, начало 22 октября
Фотография

Цикл (selenium+c#)


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 7

#1 voolfa

voolfa

    Новый участник

  • Members
  • Pip
  • 4 сообщений
  • ФИО:Гудзь Сергей Иванович

Отправлено 09 Август 2018 - 19:05

Здравствуйте.У меня есть номерок в спане, нужно его ввести в цикл.Каким образом их можно свести в один тип данных?Где можно о них прочесть
IWebElement x = Browser.FindElement(By.XPath("//span[@class='tdn link nshd bl cntr m5 small']")).GetAttribute("value");

			
			for (int ppp = 0; ppp < x; ppp++)
			{
				pa = Browser.FindElement(By.LinkText("Собрать выручку!"));
				pa.Click();
			}

 

 

  • 0

#2 Noksa

Noksa

    Активный участник

  • Members
  • PipPip
  • 109 сообщений
  • ФИО:Александр

Отправлено 10 Август 2018 - 04:53

GetAttribute(string attr) - возвращает не элемент, а стринг.

 

Только ваш цикл всё равно не будет работать в таком виде, потому что в нём вы будете всегда находить один и тот же элемент.

var x = Browser.FindElement(By.XPath("//span[@class='tdn link nshd bl cntr m5 small']")).GetAttribute("value");
int.TryParse(x, out var intX);
if (intX == 0) throw new Exception($"Алярм!!! Спан не распарсился! Парсили значение \"{x}\"");
for (var ppp = 0; ppp < intX; ppp++)
  {
    pa = Browser.FindElement(By.LinkText("Собрать выручку!")); // эта строка будет каждый раз находить один и тот же элемент
    pa.Click();
  }

Проще сделать так, без лишних велосипедов. При необходимости допилить локатор.

var elements = Browser.FindElements(By.LinkText("Собрать выручку!")).ToList();
elements.ForEach(w => w.Click()); 

  • 0

#3 voolfa

voolfa

    Новый участник

  • Members
  • Pip
  • 4 сообщений
  • ФИО:Гудзь Сергей Иванович

Отправлено 12 Август 2018 - 20:49

 

GetAttribute(string attr) - возвращает не элемент, а стринг.

 

Только ваш цикл всё равно не будет работать в таком виде, потому что в нём вы будете всегда находить один и тот же элемент.

var x = Browser.FindElement(By.XPath("//span[@class='tdn link nshd bl cntr m5 small']")).GetAttribute("value");
int.TryParse(x, out var intX);
if (intX == 0) throw new Exception($"Алярм!!! Спан не распарсился! Парсили значение \"{x}\"");
for (var ppp = 0; ppp < intX; ppp++)
  {
    pa = Browser.FindElement(By.LinkText("Собрать выручку!")); // эта строка будет каждый раз находить один и тот же элемент
    pa.Click();
  }

pa = Browser.FindElement(By.LinkText("Собрать выручку!")); // эта строка будет каждый раз находить один и тот же элемент

сюда программа не доходит. Все равно в  переменную х не пишется спан


  • 0

#4 Noksa

Noksa

    Активный участник

  • Members
  • PipPip
  • 109 сообщений
  • ФИО:Александр

Отправлено 13 Август 2018 - 05:36

pa = Browser.FindElement(By.LinkText("Собрать выручку!")); // эта строка будет каждый раз находить один и тот же элемент

сюда программа не доходит. Все равно в  переменную х не пишется спан

 

 

Что значит программа не доходит? Логи, ошибки?

Гадать на кофейной гуще не хочется.

 

И я не понял, вы хотите в переменную спан записать, или его значение?


  • 0

#5 voolfa

voolfa

    Новый участник

  • Members
  • Pip
  • 4 сообщений
  • ФИО:Гудзь Сергей Иванович

Отправлено 14 Август 2018 - 20:58

 

pa = Browser.FindElement(By.LinkText("Собрать выручку!")); // эта строка будет каждый раз находить один и тот же элемент

сюда программа не доходит. Все равно в  переменную х не пишется спан

 

 

Что значит программа не доходит? Логи, ошибки?

Гадать на кофейной гуще не хочется.

 

И я не понял, вы хотите в переменную спан записать, или его значение?

 

Выводит сообщение что спан не распарсен. хpath указан верно


  • 0

#6 Noksa

Noksa

    Активный участник

  • Members
  • PipPip
  • 109 сообщений
  • ФИО:Александр

Отправлено 15 Август 2018 - 04:54

Значит у вас там не инт в атрибуте "value"


  • 0

#7 voolfa

voolfa

    Новый участник

  • Members
  • Pip
  • 4 сообщений
  • ФИО:Гудзь Сергей Иванович

Отправлено 21 Август 2018 - 21:42

Значит у вас там не инт в атрибуте "value"

спасибо, разобрался

var elements = Browser.FindElements(By.LinkText("Собрать выручку!")).ToList();
elements.ForEach(w => w.Click()); 

не подскажите что в этот код нужно вставить?Такая задержка не помогает: Thread.Sleep(2000);(элементы не успевают загрузиться на страницу) 


  • 0

#8 Noksa

Noksa

    Активный участник

  • Members
  • PipPip
  • 109 сообщений
  • ФИО:Александр

Отправлено 22 Август 2018 - 05:23

var wait = new WebDriverWait(Browser, TimeSpan.FromSeconds(60)); // время условное
        var elements = Browser.FindElements(By.LinkText("Собрать выручку!")).ToList();
        elements.ForEach(ele =>
        {
            wait.Until(ExpectedConditions.ElementToBeClickable(ele));
            ele.Click();
        });

Либо можно подождать, пока они изначально все станут доступны для клика, а потом кликать. 


  • 0


Selenium 2.0: стартовый уровень
онлайн, начало 9 ноября
Программирование на Java для тестировщиков
онлайн, начало 12 октября
Автоматизация функционального тестирования
онлайн, начало 5 октября
Selenium WebDriver: полное руководство
онлайн, начало 19 октября



Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных

Яндекс.Метрика
Реклама на портале