定位元素时经常会出现定位不到元素,这时候我们需要观察标签的上下文,一般情况下这些定位不到的元素存放在了frame或者放到窗口了,只要我们切入进去就可以很容易定位到元素。

处理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邮箱为例子写了一下。

python selenium-webdriver 定位frame中的元素 (十三)的更多相关文章

  1. Java中通过Selenium WebDriver定位iframe中的元素

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 问题:有一些元素,无论是通过id或是xpath等等,怎么都定位不到. 分析:这很可能是因为你要定位 ...

  2. Python脚本控制的WebDriver 常用操作 <二十四> 定位frame中的元素

    测试用例场景 处理frame需要用到2个方法,分别是switch_to_frame(name_or_id_or_frame_element)和switch_to_default_content() 如 ...

  3. Python+Selenium 自动化实现实例-定位frame中的元素

    场景 处理frame需要用到2个方法,分别是switch_to_frame(name_or_id_or_frame_element)和switch_to_default_content() 如何理解这 ...

  4. Python+Selenium学习--定位iframe中的对象

    场景 在web 应用中经常会出现frame 嵌套的应用,假设页面上有A.B 两个frame,其中B 在A 内,那么定位B 中的内容则需要先到A,然后再到B.      switch_to_frame ...

  5. Python+Selenium WebDriver API:浏览器及元素的常用函数及变量整理总结

    由于网页自动化要操作浏览器以及浏览器页面元素,这里笔者就将浏览器及页面元素常用的函数及变量整理总结一下,以供读者在编写网页自动化测试时查阅. from selenium import webdrive ...

  6. 定位frame中的元素

    场景 处理frame需要用到2个方法,分别是switch_to_frame(name_or_id_or_frame_element)和switch_to_default_content() 如何理解这 ...

  7. python + selenium webdriver 复合型css样式的元素定位方法

    <div class="header layout clearfix"></div> 当元素没有id,没有name,没有任何,只有一个class的时候,应该 ...

  8. 转:python webdriver API 之定位 frame 中的对象

    在 web 应用中经常会出现 frame 嵌套的应用,假设页面上有 A.B 两个 frame,其中 B 在 A 内,那么定位 B 中的内容则需要先到 A,然后再到 B.switch_to_frame  ...

  9. Python+Selenium自动化-定位页面元素的八种方法

    Python+Selenium自动化-定位页面元素的八种方法   本篇文字主要学习selenium定位页面元素的集中方法,以百度首页为例子. 0.元素定位方法主要有: id定位:find_elemen ...

随机推荐

  1. 【SoftwareTesting】Homework2

    For the Program1, For Question1: The fault is that in the loop condition, ' i ' should be not less t ...

  2. [server]利用python构建的服务器地址问题

    http://0.0.0.0:8000/ 利用github开源项目搭建AI上色师时,遇到了建立server却无法访问的问题,ip如上. 其实很简单,0.0.0.0并不是有效的ip地址,用localho ...

  3. css实现文本块在容器中垂直居中

    效果如图: css代码: .textContainer { display: -webkit-box; -webkit-box-orient: vertical; -webkit-box-pack: ...

  4. python面向对象之静态属性/静态方法/类方法/组合

    继续学习,不要松懈 #!/usr/bin/env python # coding:utf-8 class Campus: def __init__(self,name,addr,type): self ...

  5. Labview笔记-创建自定义控件

    labview中的控件种类很多,但是样式或者外观有时不能满足我们的需求.如何制作一个好看酷酷的自定义控件呢? 以开关为例,我们先添加一个labview中自带的确定开关控件 之后右键该控件--高级--自 ...

  6. 暴力解2018刑侦题python版

    # 1-->a 2-->b 3-->c 4-->d a[1]-->question1 a=[None]*11 #11是为了下标方便些,要不逻辑描述的时候容易出错 sum= ...

  7. 运维ip语法,DNS配置方法

    修改配置文件: /etc/resolv.conf nameserver DNS_IP_1 nameserver DNS_IP_2 nameserver 指定本机解析: /etc/hosts 主机IP ...

  8. c#错误cs0006

    生成解决方案时报“error CS0006: Metadata file '.../.../.../xxx.dll'could not be found". 错误列表-下拉框选择整个解决方案 ...

  9. Knowledge From Practice(JavaScript)

    1.HTML事件对象 onmouseover:鼠标移入事件 onmouseout:鼠标移出事件 onmousedown:鼠标落下事件 onmouseup:鼠标抬起事件 例子: onclick:鼠标点击 ...

  10. NodeJS静态文件访问性能测试

    受益于JavaScript语言优秀特点,使NodeJS开发服务端应用很方便,配合NPM官方提供的大量第三方组件,让NodeJS更加如虎添翼.最近,需要使用NodeJS做一个服务端HTML5的游戏服务器 ...