Selenium 定位Frame页面元素抛错 NoSuchElementException 怎么解决?

在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()方法,同时也是兼容老版本的。



我的回答