带有Selenium变量的Visual Basic C#在css选择器中

问题描述 投票:0回答:2

我只用了一个星期左右进入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)”。第一个是自动创建顺序变量,第二个是尝试使用变量“i”获取第n个子项。我无法弄清楚如何在任何一个实例中格式化“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);
}

谢谢,唐

c# selenium css-selectors
2个回答
0
投票

您应该使用列表来存储不同的项目,您必须知道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]访问列表项

对于问题的第二部分,你必须将字符串与for循环的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
投票

你不能做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");
© www.soinside.com 2019 - 2024. All rights reserved.