我正在尝试使用IE和Watir自动化网页。 当我使用chrome加载页面并使用开发工具时,我可以识别我需要填写的字段,并填写其ID和名称。
但是,Watir无法找到该字段。我怀疑这是因为它深埋在HTML层次结构中。我可以告诉Watir对该字段进行递归搜索(在所有帧,区域和部分中)吗?
如果不可能,我可以从chrome开发工具中提取元素路径并在我的脚本中使用它吗?
答案 0 :(得分:4)
如果Watir找不到HTML元素,那么你知道它就在那里,那么它可能就在一个框架中。
答案 1 :(得分:1)
如果没有看到HTML,或者至少是相关对象的路径,很难给出具体的建议(确切的代码)。
除了框架(每个框架都像它自己独特的网页一样)之外,您只需要提供尽可能多的“路径”来确保唯一性。例如,如果您有一个预先不知道URL的链接,并且它没有唯一的文本或标识符,但是它位于另一个'容器元素中,就像div具有一些唯一的名称,类,id等(或者那些组合然后你可以从容器中识别对象。 e.g。
browser.div(:how, what).link(:index, 0).click #note index would be 1 in watir 1.x, 0 in 2.x and watir-webdriver
在帧的情况下,尤其是(可能是众神怜惜你)嵌套帧,你需要指定属于该对象路径一部分的所有帧,然后足够的细节,以确保它可以在包含您尝试访问的元素的框架内唯一标识。
(社论):在大多数情况下,从我所看到的情况来看,大多数现代网站都避免使用框架,除非在极少数特定情况下,例如“框架”链接到外部网站(例如Linked-In处理在其组讨论线程中发布的其他网站的链接)如果许多人使用很多框架甚至不是'pre 9/11',那么使用很多框架就被认为是'web 1.0' CSS和其他方法实现相同的视觉效果,如使用框架为子区域等,没有框架的所有缺点。
答案 2 :(得分:0)
Sam,Watir默认搜索整个页面,无论元素位于何处。我的猜测是你的Watir浏览器命令的方式/内容是不正确的。您能否在text_field定位器上发布您的尝试以及文本字段的HTML代码?
如果您知道使用Chrome / Firefox / IE开发工具(ID,类,名称,标题等)的“方法”,并且您知道“what”(“firstName”,“MyTextField”,“blue_text_field”)等等,然后你可以使用Watir中的那些细节找到它:
@browser.text_field(:how, what)
@browser.text_field(:id, "firstName")
请在此处查看这些方法的文档:http://watir.com/documentation/