从iframe切换回时,WATIR无法在父级上找到链接或按钮

时间:2012-07-30 18:55:33

标签: testing watir watir-webdriver

我在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放入页面,而页面上则是另一个评论栏(主页)

这是我所知道的,因为我已经通过脚本验证了它。该页面将显示所有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

KABOOM!我上面找不到元素错误。

由于某种原因,它不再看到主页面或按钮上的链接。知道是什么原因引起的吗?我一整天都在寻找这个,关于我能运行这个脚本之前剩下的唯一的事情,其他一切都很好。

有谁知道如何在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

页面中的Javascript链接 15个
(正确)

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

(以上一行毫无意义。聚焦并重新聚焦回帧:索引: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)

1 个答案:

答案 0 :(得分:0)

可能是Watir-Webdriver中的一个错误,不完全确定没有html来重现它,但是你可以试试下面的内容(就在你尝试点击12链接之前):

browser.window(:url => the_url_of_your_page).use

如果某些内容与Watir-Webdriver混乱,它可能会“刷新”页面的HTML。你永远不会知道!

除此之外,我会查看Firebug之类的内容,看看点击显示第一个iFrame的链接后页面是否有不同之处。

如果没有任何更改,请确保您可以在执行任何其他操作之前单击第12页。如果你得到的错误是正确的,那么页面上可能存在一个隐藏元素,其中包含与您尝试选择的链接相同的文本,在这种情况下为12.要确保不是这种情况,您始终可以使用{ {1}}返回页面上带有该文本的链接数。

除此之外,我真的不确定。