在Web應用中經常會遇到frame/iframe 表單嵌套頁面的應用,WebDriver 只能在一個頁面上對元素識別與定位,對於frame/iframe 表單內嵌頁面上的元素無法直接定位。
這時就需要通過switch_to.frame()方法將當前定位的主體切換為frame/iframe 表單的內嵌頁面中:
如下兩個例子:
1 、 163郵箱登入界面:https://mail.163.com/
2 、電信話費查詢界面:https://uac.10010.com/portal/mallLogin.jsp?redirectURL=//www.10010.com
3、alert :彈出的提示框 d.switch_to_alert()
4 、群里有個小伙伴:http://login.189.cn/web/login 登入后輸入密碼 ,id定位不到了,(單步執行可以)后來發現是焦點丟失(這里感謝翎兒/jack指導)
# -*- coding: UTF-8 -*-
from selenium import webdriver
from time import sleep
url1='https://mail.163.com/'
account='shalalla'
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(url1)
sleep(2)
driver.switch_to.frame("x-URS-iframe") #切換到表單
driver.find_element_by_name("email").clear()
driver.find_element_by_name("email").send_keys(account)
2 、 電信話費查詢界面:https://uac.10010.com/portal/mallLogin.jsp?redirectURL=//www.10010.com


>>> from selenium import webdriver
>>> url='https://uac.10010.com/portal/mallLogin.jsp?redirectURL=//www.10010.com'
>>> account='18605028607'
>>> d = webdriver.Chrome()
>>> d.maximize_window()
>>> d.get(url)
>>> d.switch_to.frame(d.find_element_by_tag_name("iframe"))
>>> d.find_element_by_id("userName").clear()
3、alert :彈出的提示框 d.switch_to_alert()
4 、群里有個小伙伴:http://login.189.cn/web/login 登入后輸入密碼 ,id定位不到了,(單步執行可以)后來發現是焦點丟失(這里感謝翎兒/jack指導)
可能是輸入賬號后頁面刷新了,也可能是其他原因,加了actionchains 解決了:

1 from selenium import webdriver 2 from selenium.webdriver.common.action_chains import ActionChains 3 from time import sleep 4 d=webdriver.Chrome() 5 d.maximize_window() 6 d.get('http://login.189.cn/web/login') 7 a=d.find_element_by_name('Account') 8 a.clear() 9 a.send_keys('1234') 10 sleep(3) 11 click_b1=d.find_element_by_xpath(".//input[@id='txtShowPwd']") 12 # click_b1=d.find_element_by_id('txtShowPwd') 13 sleep(1) 14 ActionChains(d).click(click_b1).send_keys('1234').perform()
ActiionChains補充學習地址:
http://blog.csdn.net/huilan_same/article/details/52305176
---------------------------------------------------
以下是后來的各種元素定位的坑集合: