selenium提供了frame切换,但不像窗口,提供句柄,当然为了能够切换,它提供了就不是一个函数
driver.switch_to_frame("frameName") #切换到frameName里可以是name, locator,id
driver.switch_to_frame("frameName.0.child")
driver.switch_to_default_contents() #切换出当前frame
我们经常定位不到元素,明明可以看到,却定位不到,大多跟frame有关,如登录163邮箱页面
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('http://mail.163.com')
print 'Before login-------------------------------------'
#print current page title
title = driver.title
print title
now_url = driver.current_url
print now_url
driver.switch_to_frame("x-URS-iframe") #非常容易遗忘这个frame
driver.find_element_by_name("email").clear()
driver.find_element_by_name("email").send_keys("XXXX")
driver.find_element_by_name("password").clear()
driver.find_element_by_name("password").send_keys("XXXXXX")
driver.find_element_by_id("dologin").click()
time.sleep(10)
print 'After login --------------------------------------'
# print title again
title = driver.title
print title
#print url again
now_url = driver.current_url
print now_url
#print login user
user = driver.find_element_by_id("spnUid").text
print user
driver.close()
同时我们还会遇到这么一个场景,一个页面由两块组成,一侧是sidebar-frame, 另一侧是content-frame,此时你需要先定位一个元素在sidebar-frame中,随后你又要定位到另一个content-frame中的元素,这时你不能直接定位,而需要先切换出之前进入的frame再进入到所要定位元素的frame,再定位元素
driver.switch_to_frame("sidebar_frame")
driver.find_element_by_id("network")
driver.switch_to_default_contents()
driver.switch_to_frame("content_frame")
driver.find_element_by_id("interface")
参考:
《Selenium2自动化测试实战》
《selenium python buildings release 2》
来源:oschina
链接:https://my.oschina.net/u/2303535/blog/725112