c# - Selenium 2 WebDriver 未按预期评估更新的 DOM

标签 c# javascript selenium pageobjects

我正在 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/

相关文章:

javascript - 设置可以选择的复选框的数量限制

java - 错误 : Element q not found. ..Eclipse 中的 SeleniumRC...提供了堆栈跟踪和代码..请解决?

python - Selenium 不会在新标签页中打开新 URL(Python 和 Chrome)

c# - 在Unity 3D中模拟 "Swipe to Unlock"

c# - invalidate 方法有什么作用?

c# - C# winforms 上的文件夹浏览器对话框

javascript - HTML 5 - 如何缩放 Canvas 背景图像

javascript - CORS 是执行跨域 AJAX 请求的安全方法吗?

python - 从多个 div (selenium) 中抓取第一个 child 的属性

c# - 正确的程序结构