Selenium窗口切换

  1. 切换窗口
    # 获取多个windows句柄
    windows = driver.windows_handles
    # 切换到最新的窗口
    driver.switch_to.window(windows[-1])
    

     

  2. 切换弹窗
    driver.switch_to.alert()
    driver.accept()
    driver.dismiss()
    driver.send_keys()
    

     

  3. 切换自定义窗口
    无甚特殊,自定义窗口一般使用正常的元素定位就可以搞定
  4. 切换frame
    """ 
    iframe标签可以创建包含另一个文档的的内联框架(即行内框架),iframe框架中可以内含一个独立的html文件
     优点:程序调入静态页面会方便一些,而且将页面和程序分离了
     缺点:样式需要额外连入,则增加了一些请求;iframe虽然可以把原来的页面完全显示出来,但是因为是内嵌
          的,所以对搜索引擎很不友好,网站很难有好的排名;iframe的框架结构有时候会很让人迷茫,多个 
          框架中都出现滚动条时,往往会让人感到厌烦;在运用框架结构时,如果导航链接出现错误,导致链接 
          的对象出现在导航框架中,会使访问者困在其中,而没有其余的目标可以访问;而且在调用外部页时, 
          会需要额外调用css,产生额外的请求次数。
    """
    
    """
    建议少用iframe?
    
    iframe的创建比其它如scripts和css的DOM元素的创建慢了1-2个数量级。
    
    onload事件以及连接池(connection pool)的问题:
    
    1) iframe阻塞页面加载:浏览器及时触发onload事件很重要,比如onload事件触发使浏览器"忙"指示器停
    止,表现为页面加载完毕,该事件延迟后,会导致用户体验到'慢'的感觉,而window的onload事件在所有
    iframe加载后(包含内部的元素)才会触发。在Safari和Chrome里,通过JavaScript动态设置的iframe的
    src可以避免这种阻塞情况
    
    2) 唯一的连接池:浏览器一般只能针对某一web服务器打开少量的连接,老版本的浏览器可能对同一个主机名
    只同时打开两个连接。那么就会出现,iframe中的内容占用了连接,甚至用光了连接,从而阻塞了主页资源的
    加载,加上一般情况下,iframe中的内容都没有主页中的内容重要,这时就显得喧宾夺主了。常见的解决办法
    比如在主页面其他元素或者重要元素加载完成后,再动态设置iframe的src。
    
    总而言之,iframe可以用简单的方式加载想要的页面,但iframe会对页面的性能带来很大的影响,使用时要慎重
    """
    
    """
    iframe与frame的区别:
    1.frame不能脱离frameset单独使用,iframe可以;
    2.frame不能放在body中;
    3.嵌套在frameset中的iframe必须放在body中
    4.不嵌套在frameset中的iframe可以随意使用
    5.frame的高度只能通过frameset控制;iframe可以自己控制,不能通过frameset控制
    """
    
    # 根据iframe的name
    dr.switch_to.frame('frame_name')
    # 根据iframe的下标
    dr.switch_to.frame(1)
    # 根据iframe中的元素
    dr.switch_to.frame(driver.find_elements_by_tag_name('iframe')[0])
    # 切换出当前的iframe
    dr.switch_to.parent_frame()
    # 返回最外层的iframe
    dr.switch_to.default_content()

     

你可能感兴趣的:(前端,UI自动化测试)