首先......我尽我所能,并尝试了我发现的一切!!
在WinXp中安装了以下gem:
Watir-webdriver 0.6.10 | selenium-webdriver 2.42.0 | Firefox 30
我在输入标记元素中有一个type ="按钮",我确定它存在于浏览器中(返回true存在?),但是它是虽然对用户可见,但是对watir不可见(将false返回到可见?或存在?)。
我已经尝试了.hover,.fire_event" onmouseover",。click&fire_event(" onclick")方法,没有人解决问题。
第一个我遇到本机事件问题是否在firefox中禁用本机事件,如watir webdriver网站中所建议的那样。
b.div(:class, "buttons btnGuardarCancelar").button(:id, "guardar").hover
b.div(:class, "buttons btnGuardarCancelar").button(:id, "guardar").when_present.click
第二个我得到了一个真正的答案,但没有任何反应,即使在该命令之后有wait_until_present或when_present。
b.div(:class, "buttons btnGuardarCancelar").button(:id, "guardar").fire_event("onmouseover")
b.div(:class, "buttons btnGuardarCancelar").button(:id, "guardar").when_present.click
第三次我得到超时,说元素不可见。
b.div(:class, "buttons btnGuardarCancelar").button(:id, "guardar").when_present.click
使用最后一个触发其他onclick事件,但不会触发与我指示的按钮相关联的事件。
b.div(:class, "buttons btnGuardarCancelar").button(:id, "guardar").fire_event("onclick")
还尝试使用以下xpath:
b.element(:xpath, "//input[@id='guardar']").when_present.click
和
b.button(:xpath, "//input[@id='guardar']").when_present.click
代码如下:
<div class="buttons btnGuardarCancelar" name="">
<input id="cancelar" class="formButton margingleft" type="button" value="Cancelar" onclick="openUserServiceConfigMenu(1);" tabindex="12"></input>
<input id="guardar" class="formButton margingleft" type="button" value="Guardar" name="guardar" onclick="sendForm();" tabindex="12"></input>
</div>
两个按钮的行为相同。我不知道该怎么做才能让它发挥作用。重要的是说我无法控制网站。
附加组件: 1)它在人类用户直接交互时起作用。 2)它也不通过irb工作。 3)我不需要点击任何其他按钮来访问此按钮。
编辑:
刚试过:
b.element(:css, "div.buttons.btnGuardarCancelar > input[name=guardar]").click
收到以下错误:
[remote server] file:/// D:/ DOCUME~1 / p056988 / LOCALS~1 / Temp / webdriver-profile20140 708-5676-32980a/extensions/fxdriver@googlecode.com/components/command_processor。 js:8791:5:在`fxdriver.preconditions.visible&#39;:元素当前不可见 因此可能无法与之交互(Selenium :: WebDriver :: Error :: ElementNotVisible 误差)...
答案 0 :(得分:2)
好吧,发现我的答案......昨天试着回答,但由于我的代表仍然很低,所以直到我发布后8小时才能回答。
在深入研究网站代码后,使用Firefox内置检查器,我发现了问题......
似乎在同一页面中有一些其他按钮,具有相同的标识符 - html就像我试图解决的那样 - 但它们是隐藏的,所以watir-webdriver尝试点击它获得的第一个html页面代码,它得到一个不可见的错误。
我设法通过编辑按钮父母来解决问题更具体,从第一个&#34;现在开始?== true&#34;路径中的元素。
b.td(:class, "tab_user_service_options").div.div.div.div(:class, "buttons btnGuardarCancelar").button(:id, "guardar").click
感谢您的所有答案。
干杯。
答案 1 :(得分:0)
有时.click不起作用。有许多不同的因素可能导致这种情况,这实际上取决于您的应用程序的实现。利用OpenQA.Selenium.Interactions.Actions
类来模拟用户移动,而不是在元素上执行click事件。
OpenQA.Selenium.Interactions.Actions actions = new OpenQA.Selenium.Interactions.Actions(driver);
actions.MoveToElement([IWebElementGoesHere]).Perform();
actions.click().Perform();
这会将鼠标移动到所需位置,然后单击它。根据您之前的评论,您可以找到Web元素,因此它应该用于移动鼠标并单击那里。还有actions.click([IWebElementGoesHere]).Perform();
我发现它通常也可以使用,但是如果它没有,那么你可以使用移动然后点击。
根据您的应用程序,您可能需要移动鼠标并在点击之前等待,如果发生了一些幕后操作......但这完全取决于您的应用程序的实现。
答案 2 :(得分:0)
您尝试点击的元素&#39;最有可能被覆盖的&#39;通过另一个元素(可能是&span;&#39;元素)。元素将返回&#39;存在?&#39;但是不可点击&#39;,&#34;因为另一个元素会收到点击&#34;
在网站上,我目前正在测试用户界面将使用&#39; span&#39;样式化页面上的元素。所以看起来我点击了一个按钮&#39; element,实际上我点击了按钮元素顶部的跨度。
我建议使用Selenium IDE并记录流程,它应该为您提供一些关于您可以在脚本中使用的元素的线索。
答案 3 :(得分:0)
根据Watir的documentation,它首先检查元素是否存在(返回该元素是否实际存在),以及哪个元素不是visible。因此,在执行任何操作之前,元素应该是可见的。
def click
assert_exists
assert_enabled
@element.click
run_checkers
end
我通常会检查元素是否存在,然后检查元素是否已预设。如果不使用,请wait_until_present
然后执行任何所需的操作。
browser.element(:css => locator).wait_until_present
browser.element(:css => locator}").click
尝试这个,如果这适合你,还原!