2016-07-22 121 views
1

我有一个隐藏的输入文本在我的页面,我需要取消隐藏它,并为其键入'*'。 Selenium默认情况下不允许您分配键或访问页面中的隐藏元素,并且帽子是可以理解的,但在这种情况下,我需要访问该隐藏元素。ExecuteScript不会改变我的元素的可见性 - 元素不可见

js.ExecuteScript("document.getElementById('ctl00_ContentPlaceHolder1_tbIsCaptchaChecked').setAttribute('display', 'flex')"); 

但仍没有运气,因为我得到的错误“元素不可见”

这里是我的完整代码:

var _driver = new ChromeDriver(); 
var js = _driver as IJavaScriptExecutor; 
js.ExecuteScript("document.getElementById('ctl00_ContentPlaceHolder1_tbIsCaptchaChecked').setAttribute('display', 'flex')"); 
_driver.FindElement(By.CssSelector("input#ctl00_ContentPlaceHolder1_tbIsCaptchaChecked.hiddenRecaptcha")).SendKeys("*"); 
+0

当您在浏览器控制台上手动尝试此'document.getElementById('ctl00_ContentPlaceHolder1_tbIsCaptchaChecked')。setAttribute('display','flex')'时,元素是否可见? –

+0

难道是executeScript和findelement之间的时间太短,DOM上的复制没有发生,并且你的元素仍然是不可见的。你有尝试插入一个等待? –

+0

@TimBourguignon我试过了,我加了10秒但没有运气 –

回答

1
我从 IJavaScriptExecutor使用此代码调用该方法 ExecuteScript

改为设置样式属性:

"document.getElementById('...').style.display = 'flex';" 

请注意,硒被视为可见,元素也需要有一个大小。