使用 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 演示的那样传入框架的数字索引,但如果您有独特的引用方式,那么我建议传入元素本身。