需要帮助从 VBA 翻译成 C# 硒

Need Help Translating from VBA to C# Selenium

提问人:SenatorUppercut 提问时间:3/16/2023 更新时间:3/16/2023 访问量:49

问:

我正在尝试将一些代码从 Excel 中的 VBA 转换为 C# Selenium,并且我正在努力解决 VBA 措辞。VBA 代码分析网站上的下拉菜单,如下所示:

Set b = a.contentDocument.getElementsByTagName("frame")("iframe_tier1")
Set c = a.contentDocument.getElementsByTagName("frame")("iframe_tier2")

For Each Ele In b.contentDocument.getElementsByTagName("select")("selectDropdownItem")
    If Ele.Value = "xxxx" Then
        Ele.Selected = True
        Exit For
    End If

Next

我正在尝试理解getElementsByTagName中的第二个参数(例如(“select”)(“selectDropdownItem”))

第二项 (“selectDropdownItem”) 是第二个参数吗?C# 似乎不想允许类似的东西:

myDriver.FindElements(By.TagName("select", "selectDropdownItem"));

我也试过:

IList<IWebElement> myElements = myDriver.FindElements(By.TagName("select")("selectDropdownItem"));
foreach(IWebElement ele in myElements)
{
MessageBox.Show(ele.Text);
}

每次我收到错误时,都说 TagName 不能接受多个参数。VBA 中 (“”) 中的第二项是什么,如何将其转换为 C#?

C# VBA Selenium-Web驱动程序

评论

0赞 JeffC 3/16/2023
我不认识这种语法,也无法想象它可能是什么。与其试图“转换”它,不如让我们重写它。请发布 SELECT 的相关 HTML。此外,指向页面本身的链接也会有所帮助。

答:

1赞 JeffC 3/16/2023 #1

下面的代码将处理您提供的代码中的循环。For Each

SelectElement dropdown = new SelectElement(driver.FindElement(By.CssSelector("select")));
dropdown.SelectByValue("xxxx");

我不确定的部分是线条。我不确定这是否应该切换到 IFRAME 或???如果是这样,您需要调整以下代码,为相关的 IFRAME/FRAME 标记提供定位器。Set b

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until(ExpectedConditions.FrameToBeAvailableAndSwitchToIt(By.CssSelector("frame"))); // if needed, update locator for IFRAME/FRAME

SelectElement dropdown = new SelectElement(driver.FindElement(By.CssSelector("select"))); // if needed, update locator for SELECT (not OPTION tags)
dropdown.SelectByValue("xxxx");

// once you are done with the elements inside the IFRAME/FRAME, switch back to the main page content
driver.SwitchTo().DefaultContent();

如果您需要有关定位器的帮助,请使用 IFRAME/FRAME 和 SELECT 的相关 HTML 更新您的问题,我将更新代码。