栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

(七) web自动化测试-网页frame与多窗口处理

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

(七) web自动化测试-网页frame与多窗口处理

(七) web自动化测试-网页frame与多窗口处理

文章目录
  • (七) web自动化测试-网页frame与多窗口处理
  • 前言
  • 一、selenium处理frame
    • 1. frame概要
    • 2. frame示例
  • 二、selenium处理多窗口
    • 1. 多窗口切换概要
    • 2. 多窗口切换处理示例
  • 总结


前言

主要介绍多frame和多窗口的场景下,selenium是如何去处理的

一、selenium处理frame 1. frame概要
  • 在web自动化中,如果一个元素定位不到,很有可能定位的元素在iframe中
  • frame是html中的框架,在html中,所谓的框架就是可以在同一个浏览器中显示不止一个页面
  • 基于html框架,又分为垂直架构和水平架构

frame分为三种:frameset、frame、iframe

  • frmeset和普通的html标签一样,不会影响正常的定位,可使用常用的定位方法进行定位
  • frame和iframe在selenium则是有一组方法进行操作

frame嵌套分为两种:一种是嵌套的,一种是未嵌套的

切换frame语法:

  • driver.switch_to.frame():根据元素id或者index切换frame
  • driver.switch_to.default_content():切换到默认frame
  • driver.switch_to.parent_frame():切换到父级frame

对于未嵌套frame:

  • driver.switch_to.frame(“frame id”)
  • driver.switch_to.frame(“frame-index”)frame无ID的时候依据索引来处理,索引从0开始,例如:driver.switch_to.frame(0)

对于嵌套的frame:

  • 对于嵌套的frame需要先进入到iframe的父节点,再进入到子节点,然后可以对字节点里面的对象进行处理和操作
  • driver.switch_to.frame(“父节点”)
  • driver.switch_to.farme(“子节点”)
2. frame示例

打开网址:https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable

from selenium import webdriver
from selenium.webdriver.common.by import By


class TestFrame:
    def setup(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.implicitly_wait(3)
        self.driver.get("https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable")

    def teardown(self):
        self.driver.quit()

    def test_frame(self):
        # 打开页面后,进入到id=iframeResult的frame下,操作元素
        self.driver.switch_to.frame("iframeResult")
        print(self.driver.find_element(By.XPATH, '//*[@id="draggable"]').text)
        # 操作完成后,回到页面,操作"点击运行",使用parent_frame()或default_content()
        self.driver.switch_to.parent_frame()
        self.driver.find_element(By.XPATH, '//*[@id="submitBTN"]').click()
二、selenium处理多窗口 1. 多窗口切换概要

简介:

  • 点击某个功能时,可能会重新打开一个窗口,对于这种情况,想在新的页面操作,就需要先切换窗口
  • 获取窗口的唯一标识用句柄表示,所以只需要切换句柄,就可以在多个页面灵活操作了

多窗口处理的流程:

  • 1 先获取到当前的窗口句柄(driver.current_window_handle)
  • 2 再获取到所有的窗口句柄(driver.window_handles)
  • 3 判断是否是想要的操作窗口,如果是,就可以对窗口进行操作,如果不是,跳转到另外一个窗口,对另一个窗口进行操作(driver.switch_to_window)
2. 多窗口切换处理示例

场景需求:

  • 打开百度首页
  • 点击登录按钮
  • 弹框中点击注册按钮,输入用户名和密码
  • 返回刚才的登录页,点击登录
  • 输入用户名和密码,低钠基登录
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep


class TestWindows:
    def setup(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.implicitly_wait(3)
        self.driver.get("https://www.baidu.com")

    def teardown(self):
        self.driver.quit()

    def test_windows(self):
        self.driver.find_element(By.XPATH, '//*[@id="s-top-loginbtn"]').click()
        self.driver.find_element(By.XPATH, '//*[@id="TANGRAM__PSP_11__regLink"]').click()
        # 点击立刻注册后,通过driver.window_handles和driver.switch_to.window切换窗口至注册页面进行操作
        windows = self.driver.window_handles
        self.driver.switch_to.window(windows[-1])
        self.driver.find_element(By.XPATH, '//*[@id="TANGRAM__PSP_4__userName"]').send_keys("test20220527")
        self.driver.find_element(By.XPATH, '//*[@id="TANGRAM__PSP_4__phone"]').send_keys("13000000000")
        self.driver.find_element(By.XPATH, '//*[@id="TANGRAM__PSP_4__password"]').send_keys("Aa123456")
        self.driver.find_element(By.XPATH, '//*[@id="TANGRAM__PSP_4__verifyCode"]').send_keys("1234")
        self.driver.find_element(By.XPATH, '//*[@id="TANGRAM__PSP_4__isAgree"]').click()
        self.driver.find_element(By.XPATH, '//*[@id="TANGRAM__PSP_4__submit"]')
        # 注册页面操作完成后,切换回上一个窗口
        self.driver.switch_to.window(windows[-2])
        self.driver.find_element(By.XPATH, '//*[@id="TANGRAM__PSP_11__userName"]').send_keys("13000000000")
        self.driver.find_element(By.XPATH, '//*[@id="TANGRAM__PSP_11__password"]').send_keys("Aa123456")
        self.driver.find_element(By.XPATH, '//*[@id="TANGRAM__PSP_11__submit"]').click()
        sleep(5)

注:

  • driver.window_handles获取当前打开浏览器所有窗口句柄,通常是按照顺序打开的,改方法返回的为list列表,所以可以通过返回列表的索引取出窗口句柄
  • driver.switch_to.window的传入参数为窗口句柄,根据上面获得的句柄,传入该方法,即可实现窗口的切换

总结

知识点:
frame处理:switch_to.frame,传入frame的id,即可进入对应的frame,返回上一层用parent_frame(),返回初始页面使用default_content()
多窗口处理:driver.window_handles,获取当前driver打开的窗口句柄列表,根据需要操作的窗口的索引使用switch_to.window()进行窗口的切换

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/945818.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号