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

Фотография

Цикл (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
  • 117 сообщений
  • ФИО:Александр

Отправлено 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
  • 117 сообщений
  • ФИО:Александр

Отправлено 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
  • 117 сообщений
  • ФИО:Александр

Отправлено 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
  • 117 сообщений
  • ФИО:Александр

Отправлено 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


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

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