我正在尝试使用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会跟踪。有什么想法吗?
答案 0 :(得分:3)
页面上是否可能有多个文本字段,输入名称为PersonName?也许隐藏在页面上的某个地方? Selenium可能会定位到其他文本字段并报告它已被禁用。尝试使用:
b.div(:class, "filter-container").text_field(:name, "PersonName").set "Robert"
答案 1 :(得分:1)
检查以确保Selenium没有在页面上找到具有相同名称的第二个隐藏元素。
答案 2 :(得分:0)
当您尝试与已禁用的元素进行交互时,会发生这种情况。 请阅读here了解详情。
答案 3 :(得分:0)
我遇到了相同类型的selenium错误消息并发现清除所有浏览器历史记录(浏览和下载历史记录,表单和搜索历史记录,Cookie,缓存,活动登录,离线网站数据和网站首选项)运行代码允许它按预期工作。
这不是一个很好的解决方案,因为我必须在运行代码的每个时间内清除所有。不优雅但功能齐全。
注意:我通过splinter调用selenium并使用firefox作为我的分裂浏览器,以防万一。
答案 4 :(得分:0)
这在我身上经常发生,看起来它试图过早地访问元素。具有两个“确定/取消”按钮的动态模式页面的示例代码:
不起作用:
$this->getSession()->getPage()->pressButton('Cancel');
在我的情况下效果很好:
sleep(1);
$this->getSession()->getPage()->pressButton('Cancel');
可悲的是,我没有找到任何硒解决方案来等待元素“可交互”。