分享

python selenium系列(九)元素定位进阶之多层框架定位

 印度阿三17 2018-10-05

实例

假设现在我们有如下一个页面,需要对其进行自动化登录操作:

 9.1.png


可能你会以为,这个页面也没什么特别之处,登录操作也是WEB UI自动化最常见、最基本的操作了,应该没啥问题吧。事实是,虽然页面元素都是唯一的,按常规的定位方法却无法定位到输入框和登录按钮,那原因是什么呢?

 

先看下页面源码,如下

 9.2.png

 

从页面源码标注的红框部分可知,要定位的元素是在一个iframe里,也就是说,当前页面嵌套了一个iframe页面,而登录操作的元素正是在这个iframe页面。所以,要操作iframe的元素,需要先转到这个页面,然后才能对该页面的元素进行操作,此时,需要使用switch_to.frame方法。

 

登录脚本源码主要部分如下

 

#因登录元素在iframe里,需要先定位到该iframe后再操作
#因该frame没有id,不能直接传入switch_to.frame
iframe = browser.find_element_by_class_name("cnt-frame") 
#登录元素在frame里,需要先switch进去
browser.switch_to.frame(iframe) 

#点击账户登录标签页,切换到登录窗口
browser.find_element_by_xpath("html/body/div[1]/div/div/div[1]/div[1]/div[2]/div/ul/li[2]").click() 

#定位到输入框
input_element = browser.find_element_by_id("inp_account_content") 
#输入客户号
input_element.send_keys(100200) 

#点击登录按钮
login_element = WebDriverWait(browser, 5).until(EC.visibility_of_element_located((By.XPATH,"html/body/div[1]/div/div/div[1]/div[1]/div[2]/div/div/div[3]/div/div/form/div[3]/button"))) 
login_element.click()

 

在脚本里,主要使用了switch_to.frame方法操作iframe中的元素,为了简便,元素的xpath表达式是直接在浏览器复制的,不建议实际应用中直接复制,难以阅读和维护。

 

三 总结

本文主要介绍了多框架场景中iframe元素的定位方式,使用了switch_to.frame方法;如果是多窗口场景,相应的方法是switch_to.window,思路相同,不在赘述。


四 其他资源

关于python学习、分享、交流,笔者开通了微信公众号【小蟒社区】,感兴趣的朋友可以关注下,欢迎加入,建立属于我们自己的小圈子,一起学python。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多