frame框架和iframe框架在现在的网页中已经很少见,但还是需要掌握框架中元素定位的方法。
在框架中的元素无法直接被定位到,必须先切换到该框架里,才能定位该框架里的页面元素。
def testframe(url):
br = startBrowser.firefox()
br.maximize_window()
br.get(url)
br.implicitly_wait(10)
br.find_element_by_id('lbNormal').click()
# 先定位到iframe,再切换过去,没有切换到框架里,无法定位到框架里的元素
# 当然,如果该frame存在静态id或唯一name属性,也可以直接用id或name属性值切换,如:
# br.switch_to.frame('id')
# br.switch_to.frame('name')
# 还可以利用模糊匹配
# starts-with 以xxx开头
# f = br.find_element_by_xpath("//iframe[starts-with(@id,'x-URS-iframe')]")
# br.switch_to.frame(f)
# 除此之外,ends-with 以xxx结尾,contains 包含xxx
br.switch_to.frame(br.find_element_by_tag_name('iframe'))
br.find_element_by_name('email').send_keys('123456')
# 退出frame,切换回初始状态
br.switch_to.default_content()
br.find_element_by_link_text('企业邮箱').click()
sleep(5)
br.quit()
先定位到iframe,再切换过去,没有切换到框架里,无法定位到框架里的元素.当然,如果该frame存在静态id或唯一name属性,也可以直接用id或name属性值切换,如:
br.switch_to.frame(‘id’)
br.switch_to.frame(‘name’)
还可以利用模糊匹配
starts-with 以xxx开头
f = br.find_element_by_xpath("//iframe[starts-with(@id,'x-URS-iframe')]")
br.switch_to.frame(f)
除此之外,ends-with 以xxx结尾,contains 包含xxx
当然,最后也不要忘了从frame框架里退出,不然无法定位该框架之外的页面元素。
# 退出frame,切换回初始状态
br.switch_to.default_content()