我对watir-webdriver有一个非常奇怪的问题。
这是我想要达到的输入标签的快照(在javascripts创建弹出窗口之后找不到获取源的方法,哈哈)
无论如何这里是我的一些代码,它使用xpath来定位这些元素(有两个文本字段和一个选择标记)
firstname = b.element(:xpath, "//div[@class='ap_popover']/input[@name='firstName']")
lastname = b.element(:xpath, "//div[@class='ap_popover']/input[@name='lastName']")
authorselector = b.element(:xpath, "//div[@class='ap_popover']/select")
puts firstname
puts lastname
puts authorselector
此代码成功返回watir元素对象。但是,当我尝试施放它们时:
puts firstname.to_subtype
它吓坏了:
C:/Ruby192/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.4.1/lib/watir-webdriver/elements/element.rb:262:在 `assert_exists':无法定位元素,使用 {:的xpath => “中的div // [@类= 'ap_popover'] /输入[@名称= 'lastName的']”} (的Watir ::异常:: UnknownObjectException)
那么,发生了什么?它可以通过xpath找到它们没有问题,但是当我试图将它们突然转换为xpath搜索失败时呢?
值得一提的是我正在浏览的html是通过javascript完全创建的,因此为什么我不能只是复制\粘贴在这里并且必须截取屏幕截图。
谢谢!
答案 0 :(得分:4)
xpath是邪恶的,如果可能的话,避免它。它很容易犯错误,难以阅读,而且通常会变慢。
你有没有试过像
这样的东西b.div(:id => 'contributors-table').textfield(:name => 'firstName')
如果你有一些古怪的无效HTML,他们有两份所有这些东西(因此重复的ID值对HTML标准无效),那么你可以添加元素的INDEX,在这种情况下可能是div容器需要这两个容器,如果有多个容器,也可能用于输入字段。
b.divs(id => 'contributors-table').size #how many are there?
#example, second instance of the contributors table, third instance in that table of an text input field with the name 'firstName'
b.div(:id => 'contributors-table', :index => 1).textfield(:name => 'firstName', :index => 2)