我正在尝试使用watir测试我们正在开发的网络应用程序并遇到一个令人困惑的错误。
有问题的HTML是
<td>
<div class="filter-container">
<input name="PersonName" type="text">
</div>
</td>
扼流的命令是:
b.text_field(:name, "PersonName").set "Robert"
并且irb给出的错误是:
Selenium::WebDriver::Error::InvalidElementStateError: Element is not currently interactable and may not be manipulated
from /usr/local/Cellar/ruby/2.0.0-p0/lib/ruby/gems/2.0.0/gems/selenium-webdriver-2.31.0/lib/selenium/webdriver/remote/response.rb:52:in `assert_ok'
from /usr/local/Cellar/ruby/2.0.0-p0/lib/ruby/gems/2.0.0/gems/selenium-webdriver-2.31.0/lib/selenium/webdriver/remote/response.rb:15:in `initialize'
(还有几行,但我认为以上是相关的东西)
文本框是使用鼠标和键盘“互动”的,所以我不知道为什么watir会跟踪。有任何想法吗?
是否可能在页面上有多个文本字段,输入名称为PersonName?也许隐藏在页面上的某个地方? Selenium可能会定位到其他文本字段并报告它已被禁用。尝试使用:
b.div(:class, "filter-container").text_field(:name, "PersonName").set "Robert"
检查以确保Selenium没有在页面上找到具有相同名称的第二个隐藏元素。
当您尝试与禁用的元素进行交互时会发生这种情况。阅读here了解更多信息。
我遇到了相同类型的selenium错误消息并发现清除所有浏览器历史记录(浏览和下载历史记录,表单和搜索历史记录,Cookie,缓存,活动登录,离线网站数据和网站首选项),然后才运行代码允许它按预期工作。
这不是一个很好的解决方案,因为每次运行代码时我都必须清除所有内容。不优雅但功能齐全。
注意:我正在通过splinter调用selenium并使用firefox作为我的分裂浏览器,以防万一。
这种情况在我身上发生了很多,看起来它试图过早地访问元素。具有动态模态和两个“确定/取消”按钮的页面的示例代码:
不起作用:
$this->getSession()->getPage()->pressButton('Cancel');
适用于我的情况:
sleep(1);
$this->getSession()->getPage()->pressButton('Cancel');
可悲的是,我没有发现任何Selenium解决方案等待元素“可互动”。