C# Selenium Webdriver无法访问Internet Explorer 8上的web元素-显示为已禁用

C# Selenium Webdriver无法访问Internet Explorer 8上的web元素-显示为已禁用,c#,selenium,internet-explorer-8,selenium-webdriver,C#,Selenium,Internet Explorer 8,Selenium Webdriver,设置详细信息: Webdriver 2.39 IEDriverServer 2.39 我在一个内部站点上运行Selenium自动化。该代码在Firefox27上运行良好,但在IE8上存在一个问题 我试图首先在IE上的文本字段中清除并输入文本。这在IE上失败,错误为“元素不能被隐藏、禁用或只读”。我检查了IE上的元素属性,它确实显示enabled为False,即使元素明显可用。在Firefox上,enabled正确设置为True 我尝试过使用Xpath和sendkeys,但它们不起作用。以下是我所

设置详细信息: Webdriver 2.39 IEDriverServer 2.39

我在一个内部站点上运行Selenium自动化。该代码在Firefox27上运行良好,但在IE8上存在一个问题

我试图首先在IE上的文本字段中清除并输入文本。这在IE上失败,错误为“元素不能被隐藏、禁用或只读”。我检查了IE上的元素属性,它确实显示enabled为False,即使元素明显可用。在Firefox上,enabled正确设置为True

我尝试过使用Xpath和sendkeys,但它们不起作用。以下是我所尝试的:

driver.FindElement(By.XPath("//input[@name='tagName']")).Clear(); - not working
driver.FindElement(By.XPath("//input[@name='tagName']")).SendKeys(tagName); - not working
driver.FindElement(By.Id("tagName")).SendKeys(Keys.Control); - not working
driver.FindElement(By.Id("tagName")).Clear(); - not working
driver.FindElement(By.Id("tagName")).SendKeys(tagName); - not working
有什么方法可以在IE上访问此元素吗

谢谢,
J.

我们经常针对IE8进行测试,并遇到“独特”的硒问题

有时我们使用
ExecuteScript
绕过Selenium挑剔的选择器,使用jQuery返回元素或直接操作元素:

// Get an element
IWebElement element = (IWebElement) driver.ExecuteScript("return $('#tagName')[0]");

// Clear the value of a field
driver.ExecuteScript("$('input[name=\'tagName\']').val('');");

最好的解决方案是Selenium的builder对象。我使用此命令强制自动化选择文本框并输入test,如下所示:

IWebElement searchField = Global.driver.FindElement(by);
builder.Click(searchField).SendKeys(searchField, textToEnter).Perform();
这成功了! J

****它可以工作,但向字段发送了错误的文本。 例如:我必须发送“11-12-2015”,它正在发送“28-12-2015”。
任何关于执行插入操作时发生的事情的线索。****

听起来像IE以不同的方式呈现页面,所以对我来说不是硒的问题……在开发人员的帮助下,你应该找出IE以不同的方式呈现页面的原因。嗨,Arran,我完全同意你的观点,我会跟进他们。接受这一点,即使元素处于禁用状态,也有办法与之交互吗?尽管您可以使用JavaScript解决它,就像其他帖子提到的那样,这是一种解决方法,而不是根本问题的解决方案。您只需使用jQuery或JavaScript从元素中删除禁用的属性。发布IE和Firefox中元素的HTML外观。你可以通过这种方式得到更好更具体的答案。HTML代码是我可以像这样使用Actions builder在文本框中输入文本,但我不知道如何首先清除文本。有什么想法吗?IWebElement textBox=driver.FindElement(按.Id(“标记名”);builder.MoveToElement(textBox).SendKeys(textBox,“Test”).Build().Perform();感谢Jabbett的建议,但我更喜欢不需要更改DOM的解决方案。
WebElement searchField = Global.driver.FindElement(by);
builder.Click(searchField).SendKeys(searchField, textToEnter).Perform();