我使用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']"
答案 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演示的那样传递帧的数字索引,但如果您有一种独特的方式来引用它,那么我建议传入元素本身。