gpt4 book ai didi

ruby - Watir-webdriver,即使找到了 "cast"元素也无法对其进行子类型化

转载 作者:太空宇宙 更新时间:2023-11-03 17:58:56 25 4
gpt4 key购买 nike

我在使用 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:in `assert_exists': unable to locate element, using {:xpath=>"//div[@class='ap_popover']/input[@name='lastName']"} (Watir::Exception::UnknownObjectException)

所以,这是怎么回事?它可以通过 xpath 毫无问题地找到它们,但是当我尝试强制转换它们时,xpath 搜索突然失败了?

值得一提的是,我正在阅读的 html 完全由 javascript 创建,因此我不能只将其复制\粘贴到此处并截取屏幕截图。

谢谢!

最佳答案

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)

关于ruby - Watir-webdriver,即使找到了 "cast"元素也无法对其进行子类型化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8482396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com