selenium2-python10-定位frame元素

web 应用中经常会出现 frame 嵌套的应用,假设页面上有 AB 两个 frame,其中 B A 内,那么

定位 B 中的内容则需要先到 A,然后再到 B

switch_to_frame 方法可以把当前定位的主体切换了 frame 里。怎么理解这句话呢?我们可以从 frame的实质去理解。frame 中实际上是嵌入了另一个页面,而 webdriver 每次只能在一个页面识别,因此才需要 用 switch_to.frame 方法去获取 frame 中嵌入的页面,对那个页面里的元素进行定位。

下面的代码中 frame.html 里有个 id f1 frame,而 f1 中又嵌入了 id f2 frame,该 frame 加载 了百度的首页。 

---------------------------frame.html -------------------------------------

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />

<title>frame</title> <script type="text/javascript" async="

"src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet" />

<script type="text/javascript">$(document).ready(function(){ 

}); </script>

</head>
<body>
<div class="row-fluid">

<div class="span10 well"> <h3>frame</h3>

<iframe id="f1" src="inner.html" width="800" height="600"></iframe> </div>

</div>
</body>
<script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script> </html> 

------------------------inner.html-----------------------------------

<html> <head>

<meta http-equiv="content-type" content="text/html;charset=utf-8" />

<title>inner</title> </head>

<body>
<div class="row-fluid">

<div class="span6 well"> <h3>inner</h3>

<iframe id="f2" src="http://www.baidu.com" width="700" height="400">

</iframe> </div>

</div> </body>

</html> 

frame.html 中嵌套 inner.html ,两个文件和我们的脚本文件放同一个目录下,通过浏览器打开 

下面通过 switch_to_frame 方法来定位 frame 内的元素: 

#coding=utf-8

from selenium import webdriverimport timeimport os

driver = webdriver.Firefox()
file_path =
'file:///' + os.path.abspath('frame.html') driver.get(file_path)

driver.implicitly_wait(30)

#先找到到 ifrome1(id = f1)driver.switch_to_frame("f1")#再找到其下面的ifrome2(id =f2) 

driver.switch_to_frame("f2")

#下面就可以正常的操作元素了driver.find_element_by_id("kw").send_keys("selenium") driver.find_element_by_id("su").click()
time.sleep(3)
driver.quit() 

switch_to_frame 的参数问题。官方说 name 是可以的,但是经过实验发现 id 也可以。所以只要 frameid name,那么处理起来是比较容易的。如果 frame 没有这两个属性的话,你可以直接手动添加。 



你可能感兴趣的:(selenium2-python10-定位frame元素)