使用 Selenium 在网页中发布选择框架
Issue selecting frame in webpage with Selenium
我正在使用 Ruby、Selenium 和 WebDriver 在 WebLogic 中自动执行一些测试,但无法 select 我页面上的框架。
页面代码(更多内容在框架本身):
<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']"
主要思想是您需要先切换到您想要的框架,然后再执行框架内的任何操作。我在 java 中实现了这个,因为我从未使用过 ruby,但它应该给你一个想法。我的代码是:
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();
请注意,在我的代码中,frame(0)
指的是网页上可用的第一帧
这在某种程度上取决于您所说的 "select the frame." 如果您想与 iframe 内的元素进行交互,则必须首先切换到该框架。您可以像示例中那样使用 switch_to.default_content
切换回顶级浏览上下文。
我想这就是您要找的:
myframe = driver.find_element(name: 'main')
driver.switch_to.frame(myframe)
您也可以像 Shaw 演示的那样传入框架的数字索引,但如果您有独特的引用方式,那么我建议传入元素本身。
我正在使用 Ruby、Selenium 和 WebDriver 在 WebLogic 中自动执行一些测试,但无法 select 我页面上的框架。
页面代码(更多内容在框架本身):
<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']"
主要思想是您需要先切换到您想要的框架,然后再执行框架内的任何操作。我在 java 中实现了这个,因为我从未使用过 ruby,但它应该给你一个想法。我的代码是:
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();
请注意,在我的代码中,frame(0)
指的是网页上可用的第一帧
这在某种程度上取决于您所说的 "select the frame." 如果您想与 iframe 内的元素进行交互,则必须首先切换到该框架。您可以像示例中那样使用 switch_to.default_content
切换回顶级浏览上下文。
我想这就是您要找的:
myframe = driver.find_element(name: 'main')
driver.switch_to.frame(myframe)
您也可以像 Shaw 演示的那样传入框架的数字索引,但如果您有独特的引用方式,那么我建议传入元素本身。