【问题标题】:Visual Basic C# with Selenium variable in css selector在 css 选择器中带有 Selenium 变量的 Visual Basic C#
【发布时间】:2019-02-13 22:35:47
【问题描述】:

我才刚接触 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


    【解决方案1】:

    你应该使用一个列表来存储不同的项目,你必须知道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");
    

    【讨论】:

    • 第二部分完美运行。但是,我无法如图所示第一个工作。我用 var item = new Object[t];然后当我使用 item[i] 时,我得到一个索引超出了数组错误的范围。
    • 你是对的。我很困惑,并认为这是 Javascript。对于动态添加对象,您必须使用列表。我将编辑我的答案
    • 你写的我明白了:错误 CS0820 无法使用数组初始化器初始化隐式类型变量
    • 工作就像一个魅力。昨天我只是在阅读列表以计算元素,但由于某种原因,数组卡在了我的脑海中。我走错了路。感谢您的帮助!
    【解决方案2】:

    你不能这样做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");
    

    【讨论】:

    • 谢谢。这确实有效并回答了两个问题之一。我可以使用它并将我所追求的信息写入 for 循环中的文件,但我也希望学习如何使用数组以及将来使用。
    猜你喜欢
    • 2017-05-24
    • 2015-09-24
    • 2022-01-14
    • 2014-01-03
    • 2011-06-21
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    相关资源
    最近更新 更多