使用Selenium在网页中选择框架

时间:2015-12-17 22:47:53

标签: ruby selenium-webdriver weblogic12c

我使用Ruby,Selenium和WebDriver在WebLogic中自动执行某些测试,并且无法在我的页面上选择框架。

页码(更多内容在帧本身中):

<html dir="ltr" lang style="visibility: visible;">
  <head>...</head>
  <frameset title="Application Content">
    <frame name="main" src="cisMain.jsp?language=ENG" scrolling="no" title="Main Frame">...</frame>
    <noframes>
    Browser not supported
    </noframes>
  </frameset>
</html>

Ruby代码:

require 'rubygems'
require 'selenium-webdriver'

driver = Selenium::WebDriver.for :chrome
driver.get "http://myserver:7001/CCBNATV/loginPage.jsp"

#log in code truncated

puts "Switch to default Content"
element = driver.switch_to.default_content

puts "Switch to main frame"
myframe = driver.find_element(:name, 'main')

我也尝试使用XPath定位框架:

driver.find_element :xpath, "/html/frameset[@title='Application Content']/frame[@name='main']"

driver.find_element :xpath, "/frame[@name='main']"

2 个答案:

答案 0 :(得分:0)

主要思想是在框架内存在任何内容之前需要切换到所需的框架。我已经在java中实现了这个,因为我从未使用过ruby,但它应该给你一个想法。我的代码是:

100

请注意,在我的代码中, WebDriver driver = new FirefoxDriver(); driver.get("http://www.w3schools.com/html/html_iframe.asp"); driver.switchTo().frame(0); driver.findElement(By.xpath(".//*[@id='topnav']/div[1]/div[1]/a[4]")).click(); 指的是网页上可用的第一帧

答案 1 :(得分:0)

这取决于你的意思&#34;选择框架。&#34;如果要与iframe内的元素进行交互,则必须先切换到该帧。您可以像在示例中一样使用switch_to.default_content切换回顶级浏览上下文。

我希望这就是你要找的东西:

myframe = driver.find_element(name: 'main')
driver.switch_to.frame(myframe)

您也可以像Shaw演示的那样传递帧的数字索引,但如果您有一种独特的方式来引用它,那么我建议传入元素本身。