selenium_webdriver(python)多層框架/視窗中元素定位問題
阿新 • • 發佈:2019-02-17
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/bootstra p-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="500"></iframe> <a href="javascript:alert('watir-webdriver better thanselenium webdriver;')">click</a> </div> </div> </body> </html>
多層框架或視窗的定位:
#coding=utf-8 ''' 多層框架或視窗的定位: switch_to_frame() switch_to_window() 對於一個現代的web 應用,經常會出現框架(frame) 或視窗(window)的應用, 這也就給我們的定位帶來了一個難題。有時候我們定位一個元素,定位器沒有問題,但一直定位不了, 這時候就要首先檢查這個元素是否在一個frame 中,seelnium webdriver 提供了一個switch_to_frame法, 可以很輕鬆的來解決這個問題。 ''' from selenium import webdriver import time import os browser = webdriver.Chrome() file_path = os.path.abspath('frame.html') print file_path browser.get(file_path) browser.implicitly_wait(30) #先找到到ifrome1(id = f1),利用其id尋找 browser.switch_to_frame("f1") #再找到其下面的ifrome2(id =f2),利用其id尋找 browser.switch_to_frame("f2") #下面就可以正常的操作元素了 browser.find_element_by_id("kw").send_keys("selenium") browser.find_element_by_id("su").click() time.sleep(3) ''' 有可能巢狀的不是框架,而是視窗,還有針對視窗的方法:switch_to_window 用法與switch_to_frame 相同: driver.switch_to_window("windowName") ''' browser.quit()