我在 Ubuntu Linux/Firefox 13 和 WATIR 上。(watir-webdriver-0.6.1)我有一个网页,其中包含指向大约 16 个 iframe 的链接。所有链接都像这样......单击“11”将显示一个名称和 ID 都等于“page_11”的 iframe "
<a href="javascript:nextPage(8);">9</a>
<a href="javascript:nextPage(9);">10</a>
<a href="javascript:nextPage(10);">11</a>
<a href="javascript:nextPage(11);">12</a>
单击数字会将 iframe 放入页面,页面上是另一个评论框(主页)
这是我 ** DO ** 知道的,因为我已经通过脚本验证了它。该页面将显示所有 16 个链接。我有我的 WATIR 脚本来单击第 11 个链接。它会这样做,它填充文本框,然后使用 browser.frame(:index,0).locate 方法返回主页面并填写位于 iframe 所在位置下方的评论框填写。
这些都不是问题。
问题是试图让脚本然后单击标有“12”的链接。(需要依次遍历这些 iframe)
它无法再次在主页上找到链接(或相关的按钮)。我最终......
[remote server] file:///tmp/webdriver-profile20120730-32067-1haylz3/extensions/fxdriver@googlecode.com/components/command_processor.js:5780:in `unknown': Element is not currently visible and so may not be interacted with (Selenium::WebDriver::Error::ElementNotVisibleError)
我的脚本(相关部分)如下......
#!/usr/local/bin/ruby
require 'rubygems'
require 'watir-webdriver'
require "webdriver-user-agent"
require 'headless'
require 'thread'
#Firefox 13 path below. Doesn't work with 14
Selenium::WebDriver::Firefox.path = '/home/janie/Downloads/firefox/firefox'
profile = Selenium::WebDriver::Firefox::Profile.new
profile.native_events = false;
browser=Watir::Browser.new :firefox, :profile => profile
browser.goto("http://myurl/test")
browser.link(:text,"11").click
browser.frame(:name,"page_11").locate
puts "Text fields "
puts browser.frame(:name,"page_11").text_fields.length
$counter=0
#This if loop works like a champ
if browser.frame(:id,"page_11").text_fields.length > 0
puts "Found and iterating through Text Boxes"
while $counter < browser.frame(:id, "page_11").text_fields.length do
browser.frame(:id, "page_11").text_field(:index, $counter).set("Robot_Test")
end
end
#Now go back to the main page
browser.frame(:index,0).locate
#The below works too so I know I am back on the top level/parent
if browser.text.include? "This is the main page"
puts "--> Test Passed. Found the test string"
else
puts "--> Test Failed! Could not find:"
end
#Now we are back in the main page again
browser.text_field(:name,"COMMENTS").set("ROBOT_TEST")
#The above works great
#And now the problem.....
browser.link(:text,"12").click
轰隆隆!我收到上面的找不到元素错误。
由于某种原因,它不再看到主页或按钮上的链接。知道是什么原因造成的吗?我整天都在寻找这个,这是关于在我可以运行这个脚本之前剩下的唯一一件事,其他一切都很好。
有谁知道如何在 Watir 中解决这种行为?非常感谢!珍妮
PS - 我尝试在 Chrome 中进行测试,我得到了..
/usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.21.2/lib/selenium/webdriver/remote/response.rb:52:in `assert_ok': Element must be displayed to click (Selenium::WebDriver::Error::ElementNotVisibleError)
只是想我会添加。
HTML 非常庞大,所以我试图尽可能简洁。
注意,更多故障排除: .....显然问题似乎是脚本没有成功跳转回父帧索引:0
脚本修改...
puts "Javascript links in page"
puts browser.links(:text, /^\d+$/).length
第15页中的 Javascript 链接
(正确)
puts "Link attribute of index:3"
puts browser.link(:index,3).text
索引的链接属性:3
2
(正确)
browser.link(:text,"2").click
(是的,工作正常)
#Refocus just to be safe
browser.frame(:index,0).locate
(上面的行是没有意义的。focus 和 refocus back to frame:index:0 没有区别)
#We're supposed to be back in parent. Let's check the no. of links again
puts "Javascript links in page - after"
puts browser.links(:text, /^\d+$/).length
页面中的 Javascript 链接 -
15之后
(这让我觉得一切都很好)
puts "Link attribute of index:3"
puts browser.link(:index,3).text
应该像上面一样返回“2”,但没有值和下面的错误消息.....
/usr/local/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.5.8/lib/watir-webdriver/elements/element.rb:365:in `assert_exists': unable to locate element, using {:text=>"3", :tag_name=>"a"} (Watir::Exception::UnknownObjectException)
from /usr/local/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.5.8/lib/watir-webdriver/elements/element.rb:95:in `click'
注2:更基本:
puts "Clicking link 2"
browser.link(:text,"2").click
没问题
puts "Clicking link 3"
browser.link(:text,"3").click
错误
/usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.21.2/lib/selenium/webdriver/remote/response.rb:52:in `assert_ok': Element must be displayed to click (Selenium::WebDriver::Error::ElementNotVisibleError)