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

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、总结

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

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

加油!!!

阅读更多
文章标签: python selenium iframe
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭