在Web应用中经常会遇到网页中嵌套多个Frame框架的情况。这种情况下,如果直接去定位嵌套在Frame页面中的元素就会抛出NoSuchElementException异常。所以在操作嵌套在Frame框架上页面元素前,需要将页面焦点切换到Frame中。Selenium提供的switch_to.frame()方法可以实现Frame之间的跳转。
#通过driver.switch_to.frame("id")跳转frame;
driver.switch_to.frame("middleframe")
在日常的自动化测试中经常会遇到alert、frame和新的window出现,所以针对这几种情况,上文中所使用的方法switch_to的相关方法非常好用。在这里特此总结一下经常用到的方法:
switch_to_alert()
切换到alert弹窗 ;
switch_to_window(window_name)
切换到某个浏览器window_name窗口 ;
switch_to.frame()
跳转到对应id/name属性的frame ;
switch_to.active_element()
返回当前焦点(光标的位置) ;
switch_to.default_content()
返回文档主页,从其他Frame/Iframe中返回到最外一层;
switch_to.parent_frame()
切换到父frame,可以切换到上一层的frame,对于层层嵌套的frame很有用 ;
注意:在低版本的selenium中,提供的方法是:
switch_to_frame() switch_to_default_content()
在此作者使用的selenium版本为:3.12.0。
该版本目前已推荐使用switch_to.frame()和switch_to.default_content()方法,同时也是兼容老版本的。