Watir-webdriver,即使找到它也不能将元素“转换”为子类型

时间:2011-12-12 23:25:54

标签: ruby parsing popup watir watir-webdriver

我对watir-webdriver有一个非常奇怪的问题。

这是我想要达到的输入标签的快照(在javascripts创建弹出窗口之后找不到获取源的方法,哈哈)

HTML of the input tag 无论如何这里是我的一些代码,它使用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完全创建的,因此为什么我不能只是复制\粘贴在这里并且必须截取屏幕截图。

谢谢!

1 个答案:

答案 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)