提问人:SenatorUppercut 提问时间:3/16/2023 更新时间:3/16/2023 访问量:49
需要帮助从 VBA 翻译成 C# 硒
Need Help Translating from VBA to C# Selenium
问:
我正在尝试将一些代码从 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#?
答:
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 更新您的问题,我将更新代码。
评论