作者:平山
http://blog.51cto.com/2681882/2293993
一 前言
在
python selenium系列(八)元素定位进阶之分层定位
一文中,介绍了层级定位的思想。在实际应用中,还会遇到另外一种情况:元素属性唯一,定位方法也正确,但元素却定位不到。此时,需要检查下该元素是否在frame里。而针对这种情况,selenium 提供的switch_to.frame方法,可以轻松解决该问题。
二 实例
假设现在我们有如下一个页面,需要对其进行自动化登录操作:
可能你会以为,这个页面也没什么特别之处,登录操作也是WEB UI自动化最常见、最基本的操作了,应该没啥问题吧。事实是,虽然页面元素都是唯一的,按常规的定位方法却无法定位到输入框和登录按钮,那原因是什么呢?
先看下页面源码,如下:
从页面源码标注的红框部分可知,要定位的元素是在一个iframe里,也就是说,当前页面嵌套了一个iframe页面,而登录操作的元素正是在这个iframe页面。所以,要操作iframe的元素,需要先转到这个页面,然后才能对该页面的元素进行操作,此时,需要使用switch_to.frame方法。
登录脚本源码主要部分如下:
在脚本里,主要使用了switch_to.frame方法操作iframe中的元素,为了简便,元素的xpath表达式是直接在浏览器复制的,不建议实际应用中直接复制,难以阅读和维护。
三 总结
本文主要介绍了多框架场景中iframe元素的定位方式,使用了switch_to.frame方法;如果是多窗口场景,相应的方法是switch_to.window,思路相同,不在赘述。
看完本文有收获?请转发分享给更多人
关注 【小蟒社区】,一起学Python
领取专属 10元无门槛券
私享最新 技术干货