我需要能够从下拉菜单中检索选定的选项。我目前正在使用以下代码(Selenium 和 C#):
var selectName = new SelectElement(driver.FindElement(By.Id("Name"));
string name= selectName.SelectedOption.Text;
这有效,但在包含大量项目(1000+)的下拉菜单上非常慢(10+ 秒)。是否有其他方法可以更快地提供结果?
该执行的的SelectedOption
财产遍历所有选项,并返回所选择的一个。在这种情况下,大部分工作由客户端绑定完成。
您可以尝试<option>
通过浏览器直接解释的 CSS检索当前选择的内容,这可能会更快。
例如:
driver.Navigate().GoToUrl("https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_select");
driver.SwitchTo().Frame(driver.FindElement(By.Id("iframeResult")));
Console.WriteLine(driver.FindElement(By.CssSelector("select option:checked")).Text);
new SelectElement(driver.FindElementByTagName("select")).SelectByText("Saab");
Console.WriteLine(driver.FindElement(By.CssSelector("select option:checked")).Text);
将分别产生Volvo
和Saab
。
编辑:我很快尝试了一个<select>
带有 10000 个选项的标签,其中第 400 个选项被选中:
var sw = new Stopwatch();
sw.Start();
Console.WriteLine(driver.FindElement(By.CssSelector("select option:checked")).Text);
sw.Stop();
Console.WriteLine("CSS: {0}", sw.Elapsed);
sw = new Stopwatch();
sw.Start();
Console.WriteLine(new SelectElement(driver.FindElement(By.TagName("select"))).SelectedOption.Text);
sw.Stop();
Console.WriteLine("SelectElement: {0}", sw.Elapsed);
在Chrome中运行对比,运行时差异巨大:
CSS: 00:00:00.0383144
SelectElement: 00:00:14.6210520
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句