c# - Selenium Webdriver C# 在 For Loop 陈旧元素引用中的下拉菜单
问题描述
当我运行 For 循环时,我只能迭代一次,而“值”不会显示为陈旧。发生了什么,我需要从第一个下拉列表中选择值来填充第二个选项。
我试图以一种不应该显示为陈旧的方式设置元素引用。
//Order Type dropdown menu
String OrderTypeDropDown = "//*[@id='OrderTypeId']";
IWebElement drpOrderType = driver.FindElement(By.XPath(OrderTypeDropDown));
//Select the order type dropdown
SelectElement select = new SelectElement(drpOrderType);
//Make a list of all order type dropdown options
IList<IWebElement> elements = select.Options;
//Itterate through all the options in the order type dropdown
foreach (IWebElement value in elements)
{
//Click the option
value.Click();
//Print out the option
Console.WriteLine(value.Text);
//Sleep
Thread.Sleep(3000);
//Change Type dropdown menu stale element reference setup
String RequestChangeDropDown = "//*[@id='RequestedChange']";
IWebElement drpChangeType = driver.FindElement(By.XPath(RequestChangeDropDown));
//Select the Requested Change dropdown
SelectElement drpSelect = new SelectElement(drpChangeType);
driver.FindElement(By.XPath(RequestChangeDropDown)).Click();
//Make a list of all Requested Change types
IList<IWebElement> change = drpSelect.Options;
foreach (IWebElement option in change)
{
Console.WriteLine(option.Text);
}
}
错误消息:OpenQA.Selenium.StaleElementReferenceException:陈旧的元素引用:元素未附加到页面文档(会话信息:chrome = 77.0.3865.90)堆栈跟踪:RemoteWebDriver.UnpackAndThrowOnError(响应错误响应)RemoteWebDriver.Execute(String driverCommandToExecute,Dictionary` 2个参数)RemoteWebElement.Click() TSR_Forms.Mobile_Device_Request_Orders() 第907行
解决方案
您必须等到元素可点击:
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(By.XPath(RequestChangeDropDown)));
因此,您可以单击它。问题是你试图点击一个在 DOM 中还不能点击的元素!
推荐阅读
- sql-server - 如何计算 SQL Server 中每秒的 DML/DQL 请求数
- javascript - 定义变量时的意外行为
- mysql - 如何按时间分组,如果mysql中没有数据计数为零?
- pdf - 如何在 puppeteer 中将多个 pdf 合并为一个 pdf?
- laravel - 我想验证数据库 laravel 8 中是否不存在数据
- android - 将硬编码字符串转换为字符串资源
- c# - 获取字典列表中的值计数
- python - 如何使用字符串布尔表达式过滤列表
- logging - YII2 日志目标不检查日志的类别并保存任何类别日志
- electron - 如何向电子更新程序提供私有 s3 存储桶凭据