C# 无法使用selenium选择字段

C# 无法使用selenium选择字段,c#,selenium,selenium-webdriver,selenium-chromedriver,C#,Selenium,Selenium Webdriver,Selenium Chromedriver,我正在使用c和selenium对网页进行测试。 问题是我有3个不同的选择字段。 附上一张照片。 第一个选项始终处于启用状态,第二个选项处于禁用状态,直到在第一个选项中选择了一个语音,与第三个选项相同,在第二个选项中选择了一个语音后,第三个选项变得可选择 我用来填充字段的代码是: SelectElement selAppl = new SelectElement(driver.FindElement(By.Id("IdApplicazione"))); selAppl.Sel

我正在使用c和selenium对网页进行测试。 问题是我有3个不同的选择字段。 附上一张照片。

第一个选项始终处于启用状态,第二个选项处于禁用状态,直到在第一个选项中选择了一个语音,与第三个选项相同,在第二个选项中选择了一个语音后,第三个选项变得可选择

我用来填充字段的代码是:

SelectElement selAppl = new SelectElement(driver.FindElement(By.Id("IdApplicazione")));
selAppl.SelectByValue(dataApp.ToString());

wait.Until(ExpectedConditions.StalenessOf(driver.FindElement((By.Id("IdDDLAmbito")))));
SelectElement selAmbito = new SelectElement(driver.FindElement(By.Id("IdDDLAmbito")));
selAmbito.SelectByValue(ambito);
        
wait.Until(ExpectedConditions.StalenessOf(driver.FindElement((By.Id("ddlFunzionalita")))));
SelectElement selFunzionalita = new SelectElement(driver.FindElement(By.Id("ddlFunzionalita")));
selFunzionalità.SelectByValue(funzionalita);
问题是前两个字段选择正确,但第三个设计没有选择任何内容,测试失败,并显示以下消息:

OpenQA.Selenium.StaleElementReferenceException:stale元素引用:元素未附加到页面文档会话信息:chrome=89.0.4389.114

如果我将线程放在睡眠中,而不是:

wait.Until(ExpectedConditions.StalenessOf(driver.FindElement((By.Id("ddlFunzionalita")))));
SelectElement selFunzionalità = new SelectElement(driver.FindElement(By.Id("ddlFunzionalita")));
它起作用了。错误报告在与以下内容相关的代码行上:

SelectElement selFunzionalità = new SelectElement(driver.FindElement(By.Id("ddlFunzionalita")));
所以我要问自己的是,我已经捕捉到了该元素的dom变化和之前的条件,为什么它没有找到它?
我做错了什么?

如果您得到“StaleElementReferenceException”,这意味着元素已更改,因为DOM已更改。 您需要在单击第一个和第二个元素后再次找到第三个元素


单击下拉列表或其他元素后,网页可能会更改。其他div或span被添加到页面或您已经找到的同一元素的属性中。

包括页面的屏幕截图是好的,但也请包括一个HTML的代表性示例作为纯文本。只是为了好玩,尝试两次等待ddlFunzionalita的stale。我想知道它是否不能为SELECT1重新加载,然后为SELECT2重新加载。。。或者别的什么。。。看不到页面就很难判断。如果阅读说明:SelectElement selFunzionalitá=new SelectElement Driver.FindElementBy.IdddlFunzionalita;我用findelement再次搜索该元素。是对的,还是我假设错了?@Alessio可能是元素显示时使用了相同的ID,但这与您以前使用的元素不同。单击下拉列表后,页面将被新元素刷新。如果您查看他发布的代码,他会在过时检查后再次使用find元素。他已经在按照你的建议做了,我是对的。当一个下拉菜单被选中时,它就像一个全新的页面。这样想:每个下拉列表都会打开一个新页面。它是具有相同属性或ID的元素,但它与您拥有的元素完全不同before@TalAngel非常感谢您的关注。我明白你说的,但我认为一旦我接受了这个元素的陈旧性,tahat one就不存在了,或者至少已经改变了。然后,我对id进行findelement,因此如果一个新的id替换了第一个id,我应该用该指令找到新的id。这有意义吗?