python selenium-webdriver 定位frame中的元素 (十三)

定位元素时常常会出现定位不到元素,这时候咱们须要观察标签的上下文,通常状况下这些定位不到的元素存放在了frame或者放到窗口了,只要咱们切入进去就能够很容易定位到元素。web

处理frame时主要使用到switch_to.frame()(切入frame也能够些写成switch_to_frame,不过这个已经用的不多了)和switch_to_default_content()两个方法,一个主要是切入到iframe里面,一个是切换到主文档中,通常状况这两个要配合着用,切进去之后操做完成元素之后,就要在切回到主文档,避免一些其余的错误。测试

  • switch_to.frame()  #若是frame 中有name和id属性就直接使用id或者name进行定位,若是没有id和name属性,能够经过find_element_by_xpath(或者其余定位)方法定位到这个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

相关文章
相关标签/搜索