我需要能够从下拉菜单中检索所选选项。我目前使用以下代码(Selenium和C#):
var selectName = new SelectElement(driver.FindElement(By.Id("Name"));
string name= selectName.SelectedOption.Text;
这样可行,但在包含大量项目(1000+)的下拉菜单上非常慢(10秒以上)。有没有其他方法可以更快地提供结果?
答案 0 :(得分:1)
SelectedOption
属性的implementation遍历所有选项,并返回所选选项。在这种情况下,大多数工作都是由客户端绑定完成的。
您可以尝试通过CSS直接检索当前选定的<option>
,这可能会更快。
例如:
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