python自動化測試(三)
多層框架或窗口的定位
1铜异、switch_to_frame
有時候我們定位一個元素,定位器沒有問題秸架,但一直定位不了揍庄,這時候就要檢查這個元素是否在一個frame中,seelnium webdriver 提供了一個switch_to_frame方法东抹,可以很輕松的來解決這個問題蚂子。
# inner.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id="inner_div">
<input type="text" name="name" id="name" value="" />
<button type="button" id="btn">按鈕</button>
</div>
<script type="text/javascript">
document.getElementById("btn").onclick = function(){
var name = document.getElementById("name").value;
window.alert(name);
}
</script>
</body>
</html>
# outter.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>定位iframe</title>
</head>
<body>
<div class="header" style="width: 100%;height: 100px;border: 1px solid red;"></div>
<div class="center" style="overflow: auto;">
<div class="left" style="height: 500px;width: 19%; border: 1px solid blue;float: left;"></div>
<iframe src="inner.html" width="60%" height="500px" style="float:left;margin-left: 10px;"></iframe>
<div class="right" style="height: 500px;width: 19%; border: 1px solid green;float: right;"></div>
</div>
<div class="footer" style="width: 100%;height: 100px;border: 1px solid red;"></div>
</body>
</html>
定位如下沃测、
# 只有導入 webdriver 包我們才能使用 webdriver API 進行自動化腳本的開發(fā)
# 將控制的 webdriver 的 Firefox 賦值給 browser;
driver = webdriver.Firefox()
# 打開本地頁面
driver.get("http://127.0.0.1:8848/kk/outter.html")
# 只能等待 在一個時間范圍內(nèi)智能的等待
driver.implicitly_wait(5)
driver.switch_to_frame("inner")
driver.find_element_by_id("name").send_keys("python自動化測試")
driver.find_element_by_id("btn").click()
time.sleep(3)
driver.quit()
2食茎、switch_to_window
有個需求蒂破、
1. 打開百度首頁,點擊登錄按鈕别渔,點擊立即注冊按鈕附迷,打開新的窗口
2. 跳轉(zhuǎn)到注冊窗口,在注冊窗口進行操作
3. 跳回到百度首頁钠糊,點擊登錄彈出框的關(guān)閉按鈕挟秤,在百度首頁進行操作
第一步 打開百度、點擊登陸抄伍、點擊注冊艘刚、
# coding=utf-8
from selenium import webdriver
import time
# 只有導入 webdriver 包我們才能使用 webdriver API 進行自動化腳本的開發(fā)
# 將控制的 webdriver 的 Firefox 賦值給 browser;
driver = webdriver.Firefox()
driver.maximize_window()
# 打開百度 點擊登陸 點擊注冊
driver.get("http://www.baidu.com")
# 獲得當前窗口
current_window = driver.current_window_handle
# 點擊登陸 link定位
time.sleep(2)
driver.find_element_by_xpath('//*[@id="s-top-loginbtn"]').click()
# 點擊注冊
time.sleep(2)
driver.find_element_by_link_text('立即注冊').click()
然后在不同的頁面 進行不同的操作
# coding=utf-8
from selenium import webdriver
import time
# 只有導入 webdriver 包我們才能使用 webdriver API 進行自動化腳本的開發(fā)
# 將控制的 webdriver 的 Firefox 賦值給 browser截珍;
driver = webdriver.Firefox()
driver.maximize_window()
# 打開百度 點擊登陸 點擊注冊
driver.get("http://www.baidu.com")
# 獲得當前窗口
current_window = driver.current_window_handle
# 點擊登陸 link定位
time.sleep(2)
driver.find_element_by_xpath('//*[@id="s-top-loginbtn"]').click()
# 點擊注冊
time.sleep(2)
driver.find_element_by_link_text('立即注冊').click()
# 獲得所有窗口
all_windows = driver.window_handles
# 循環(huán)判斷 不同的窗口執(zhí)行不同的操作
for window in all_windows:
if window != current_window: #不是百度主頁 注冊頁面
driver.switch_to.window(window) # 跳轉(zhuǎn)到注冊窗口
driver.find_element_by_id('TANGRAM__PSP_4__userName').send_keys('TOM')
driver.find_element_by_id('TANGRAM__PSP_4__phone').send_keys('15188888888')
driver.find_element_by_id('TANGRAM__PSP_4__password').send_keys('123456')
time.sleep(3)
if window == current_window:
driver.switch_to.window(window) # 跳轉(zhuǎn)到百度首頁窗口
driver.find_element_by_id('kw').send_keys('python自動化')
driver.find_element_by_id('su').click()
time.sleep(3)
driver.quit()