Visual Basic C # с переменной Selenium в селекторе css - PullRequest
0 голосов
/ 13 февраля 2019

Я только неделю или около того на C #, но благодаря таким форумам я могу собрать кучу кода и получить общее понимание.Однако у меня есть проблема с использованием переменной, которую я не могу решить.

List<IWebElement> elementList = new List<IWebElement>();
elementList.AddRange(browser.FindElements(By.CssSelector("div[class^='CalendarDays-calendarDays-']>div:nth-child(3)>div>div[class^='CalendarEvent-event-']")));
int t = elementList.Count;

for (int i = 1; i <= t; i++)
{
    var item + i = browser.FindElement(By.CssSelector("div[class^='CalendarDays-calendarDays-']>div:nth-child(3)>div>div:nth-child(i)>div>div[class^='CalendarEvent-title']")).GetAttribute("textContent");
}

Проблемы - это «var item + i» и «div: nth-child (i)».Первый автоматически создает последовательные переменные, а второй пытается получить n-го ребенка, используя переменную «i».Я не могу понять, как отформатировать «i» в любом случае.

Любая помощь будет оценена.

Рабочий код после редактирования:

List<IWebElement> elementList = new List<IWebElement>();
elementList.AddRange(browser.FindElements(By.CssSelector("div[class^='CalendarDays-calendarDays-']>div:nth-child(3)>div>div[class^='CalendarEvent-event-']")));
int t = elementList.Count;

List<String> listItems = new List<String>();
for (int i = 1; i <= t; i++)
{
    String item = browser.FindElement(By.CssSelector("div[class^='CalendarDays-calendarDays-']>div:nth-child(3)>div>div:nth-child(i)>div>div[class^='CalendarEvent-title']")).GetAttribute("textContent");
    listItems.Add(item);
}

Спасибо,Дон

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Вы должны использовать список для хранения различных предметов, вы должны знать тип GetAttribute.Я предполагаю, что это String:

List<String> listItems = new List<String>();
for (int i = 1; i <= t; i++)
{
    String item = browser.FindElement(By.CssSelector("div[class^='CalendarDays-calendarDays-']>div:nth-child(3)>div>div:nth-child(i)>div>div[class^='CalendarEvent-title']")).GetAttribute("textContent");
    listItems.Add(item);
}

, тогда вы можете получить доступ к элементам списка по индексу listItems[i]

Во второй части вопроса вам нужно объединить строку ся из цикла, как это:

browser.FindElement(By.CssSelector("div[class^='CalendarDays-calendarDays-']>div:nth-child(3)>div>div:nth-child("+i+")>div>div[class^='CalendarEvent-title']")).GetAttribute("textContent");
0 голосов
/ 13 февраля 2019

Вы не можете сделать var item + i.Просто используйте одну и ту же переменную каждый раз, она все равно находится внутри области видимости цикла.

Чтобы вставить переменную i в локатор, вы можете использовать интерполяцию строк

var item = browser.FindElement(By.CssSelector($"div[class^='CalendarDays-calendarDays-']>div:nth-child(3)>div>div:nth-child({i})>div>div[class^='CalendarEvent-title']")).GetAttribute("textContent");
...