定位元素时常常会出现定位不到元素,这时候咱们须要观察标签的上下文,通常状况下这些定位不到的元素存放在了frame或者放到窗口了,只要咱们切入进去就能够很容易定位到元素。web
处理frame时主要使用到switch_to.frame()(切入frame也能够些写成switch_to_frame,不过这个已经用的不多了)和switch_to_default_content()两个方法,一个主要是切入到iframe里面,一个是切换到主文档中,通常状况这两个要配合着用,切进去之后操做完成元素之后,就要在切回到主文档,避免一些其余的错误。测试
#-*- coding:utf-8 -*- '''126邮箱登录''' import time import unittest from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC class WANGYI(unittest.TestCase): def setUp(self): print('开始测试') self.username = 'yuhuan2006_2548' # 定义帐号 self.password = 'xxxxx' #定义密码 self.driver = webdriver.Chrome() self.driver.maximize_window() self.base_url = "http://mail.126.com/" self.driver.get(self.base_url) def test_login(self): '''测试登录126邮箱''' WebDriverWait(self.driver,10).until( EC.presence_of_element_located((By.ID, "x-URS-iframe"))) self.driver.switch_to.frame("x-URS-iframe") #切换进入frame 在这里也能够写self.driver.switch_to.frame(self.driver.find_element_by_xpath('//*[@id="x-URS-iframe"]')),先定位元素 self.driver.find_element_by_name("email").send_keys(self.username) self.driver.find_element_by_name("password").send_keys(self.password) self.driver.find_element_by_id("dologin").click() WebDriverWait(self.driver,10).until( EC.presence_of_element_located((By.ID, "spnUid"))) #增长等待时间,判断验证信息元素是否显示 verifyLoginSucceed = self.driver.find_element_by_xpath('//*[@id="spnUid"]').text self.assertIn(self.username,verifyLoginSucceed) #验证是否登录成功 def tearDown(self): self.driver.implicitly_wait(30) self.driver.quit() print('测试结束') if __name__ == '__main__': unittest.main()
正好有人问我126邮箱如何输入帐号和密码,开始他觉得是因为Input标签的属性致使没有办法输入帐号,后来正好有时间了,看了一下126邮箱的你过来,发现这里正是用到了iframe切换,因此在这里总结了一下frame,而且以126邮箱为例子写了一下。ui