我正在 C# 中使用 Selenium 2 WebDriver 来自动化输入页面。加载 DOM 时会隐藏一个验证摘要控件。这是它在额外负载下的样子。
<div id='validation_summary' style='display: none'>
<div id='validation_message'/>
当我的 pageObject 在 Selenium 中初始化时,WebElement 的 Displayed 属性设置为“false”。这是我所期望的。
点击提交按钮后,dom 更改为:
<div id='validation_summary' style='display: block'>
<div id='validation_message'>
<div><a>Fix Me</a></div>
</div>
当我尝试通过以下方式访问 WebElement 时,发出单击验证后,Displayed 属性仍然为“false”并且附加的 div 不可见:
var validation = new WebDriverWait(_driver, TimeSpan.FromSeconds(10)).Until<IWebElement>((d)=>d.FindElement(By.Id('validation_message'));
这真的可行吗?我是否应该期望 Selenium 足够聪明来评估当前状态下的 DOM?它实际上如何评估元素的 Displayed 属性?如果我查看 PageSource 属性,我确实会看到文本存在。我不明白为什么我看不到 Selenium 反射(reflect)的变化。
最佳答案
试试这个:
var scripter = driver as JavaScriptExecutor;
var result = scripter.ExecuteScript("return $('#validation_message').is(':hidden');").ToString();
if (result.ToLower().Equals("true"))
{
//Do your stuff
}
并且不要羞于使用 javaScript。以我的拙见,Selenium 仍然没有足够的工具,因此您可以仅使用 javaScript 来实现您自己的工具。
关于c# - Selenium 2 WebDriver 未按预期评估更新的 DOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12101642/