selenium2+python之iframe切换--定位元素

原创 2018年04月16日 19:43:54

1、前言

作为一个自动化测试的小白,抱着成为大神的心态,开始了学习自动化测试的历程;

听朋友说虫师的selenium很好,于是选择了它

但是今天刚开始学习不久就遇到了一个困扰了我两天的问题,

决定把这个问题记录一下;


2、环境

系统:macOS 10.12.6

python版本:3.6.4

IDE : pyCharm

浏览器:chrome



3、问题以及解决方法

根据书中的例子:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://www.126.com")

driver.find_element_by_id("idInput").clear()
driver.find_element_by_id("idInput").send_keys("username")
driver.find_element_by_id("pwdInput").clear()
driver.find_element_by_id("pwdInput").send_keys("password")
driver.find_element_by_id("loginBtn").click()

driver.quit()

但是运行以后却发现代码报错:


查看发现126邮箱的输入框ID不是“idInput”和“pwdInput”,

而此时看到的输入框的id是动态的,所以不能使用

于是将id更换成了name,可是运行后依然报以上错误,

翻阅各种资料发现,一个网页中是可以嵌入好几个iframe的,也就是主页面中存在单独的小页面:

而想要获得小页面中的元素,需要切换iframe,切换方式有三种:

# 1.用frame的index来定位,第一个是0
driver.switch_to.frame(0)  
# 2.用id来定位
driver.switch_to.frame("frame1")  
# 3.用name来定位
driver.switch_to.frame("myframe")  
# 4.用WebElement对象来定位
driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))  

于是我选择了其中一种方法,但是结果还是不尽人意,还是找不到元素

最后,最关键的来了,无意中使用了等待,于是问题就完美解决了

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://www.126.com/")

sleep(3)
driver.switch_to.frame("x-URS-iframe")

driver.find_element_by_name("email").clear()
driver.find_element_by_name("email").send_keys("username")
driver.quit()


4、总结

有些元素可能并非立即出来,是异步加载的,运行的时候中间加些等待时间

问题自己一步一步的去查资料,解决出来的记忆会很深刻,并且在查资料的过程中还会学习到一些另外的知识

加油!!!

通过切换iframe来定位元素(用于Python+selenium自动化测试)

切换 iframe: 1.由于登录按钮是在iframe上,所以第一步需要把定位器切换到iframe上 2.用switch_to_frame方法切换,此处有id属性,可以直接用id定位切换 ...
  • cyjs1988
  • cyjs1988
  • 2017-06-01 09:04:53
  • 2318

Robot Framework之---iframe无id时的定位方法

在切换ifame的时候,有时iframe是含有id的,就可以直接定位使用 但是当iframe没有id信息的时候,如下图, select frame    Xpath=//*[contains(@...
  • duff2016
  • duff2016
  • 2017-01-09 15:08:05
  • 1038

Selenium多层级的iframe中元素的定位

     很多时候我们遇到多层级的iframe就会想各种方法去获取iframe中的元素,但其实很简单就可以做到的,就是一级一级获取就可以了,获取至你需要的那个层级即可,下面看下实际的案例; ...
  • Lily_XL
  • Lily_XL
  • 2016-07-14 11:32:46
  • 2395

robot+selenium2library iframe中嵌套iframe的定位

robot+selenium2library iframe中嵌套iframe的定位web测试中,iframe的用法非常常用,且iframe中嵌套iframe也时常可见,经常会遇到定位不要元素的问题,以...
  • Lsaisai
  • Lsaisai
  • 2017-06-05 15:29:45
  • 1488

python selenium 定位iframe(多层框架)

python selenium 定位iframe(多层框架)
  • xm_csdn
  • xm_csdn
  • 2016-12-01 10:43:47
  • 5574

第十节:定位以及切换frame(iframe)

在 web 应用中经常会遇到 frame 嵌套页面的应用,而 WebDriver 每次只能在一个页面上识别元素,对于 frame 嵌套内的页面上的元素,直接定位是定位是定位不到的。 frame标签有...
  • wangxh_haha
  • wangxh_haha
  • 2017-09-04 18:54:28
  • 278

selenium之 定位以及切换frame(iframe)

很多人在用selenium定位页面元素的时候会遇到定位不到的问题,明明元素就在那儿,用firebug也可以看到,就是定位不到,这种情况很有可能是frame在搞鬼(原因之一,改天专门说说定位不到元素,可...
  • huilan_same
  • huilan_same
  • 2016-08-13 17:34:04
  • 46225

Webdriver定位之iframe中的元素定位

From: http://blog.sina.com.cn/s/blog_68f262210101mcxp.html 参考:虫师:http://www.cnblogs.com/fnng/p/...
  • qinglu000
  • qinglu000
  • 2016-09-21 11:26:22
  • 492

Java+Selenium3方法篇23-iframe切换的问题

这篇介绍webdriver在处理定位元素报错,提示没有这样的元素。这个时候,有可能是你测试的网页,采用了frame技术。什么是frame,简单来说,就是把一个网页划分成多个子页面,脑补这下这样的页面。...
  • u011541946
  • u011541946
  • 2017-06-24 22:42:05
  • 2413

selenium python iframe的切换

若是网页中存在iframe,此时是获取不到元素的,因此需要切换到iframe。 对于selenium3,python的切换方式是: driver=webdriver.Chrome() drive...
  • u010601901
  • u010601901
  • 2017-01-24 10:23:55
  • 565
收藏助手
不良信息举报
您举报文章:selenium2+python之iframe切换--定位元素
举报原因:
原因补充:

(最多只允许输入30个字)