selenium 自动化测试工具实战项目(窗口切换)

介绍
复制代码
###### 测试的系统:白月黑羽网站的测试系统(白月SMS系统)
复制代码
###### 测试内容:点击【学习教程】链接跳转到白月黑羽网站,获取此网站上的标题,然后回到原来的系统。
复制代码
###### 所涉及的知识点:frame切换/窗口切换

这个iframe元素非常的特殊,在html语法中,frame元素或者iframe元素的内容**会包含一个被嵌入的零一份html文档**。

在我们使用selenium打开一个网页是,我们的操作范围缺省是当前的html,并不包含被嵌入的html文档里面的内容。

如果我们要操作被嵌入的html文档中的元素,就必须切换操作范围到被嵌入的文档中。
* **切换到Frame(3种方式)**

  ```python
  # 方式1:通过索引切换(第1个iframe,从0开始)
  driver.switch_to.frame(0)

  # 方式2:通过 name 或 id 属性切换
  driver.switch_to.frame("frame-name")  # name="frame-name"
  driver.switch_to.frame("frame-id")    # id="frame-id"

  # 方式3:通过 WebElement 对象切换(最灵活,推荐)
  iframe = driver.find_element(By.CSS_SELECTOR, "iframe.class-name")
  driver.switch_to.frame(iframe)
  ```

* **切回主文档/父级Frame**

```python
# 切回父级 Frame(如果有多层嵌套,只向上退一层)
driver.switch_to.parent_frame()

# 切回最外层的主文档(彻底退出所有 iframe)
driver.switch_to.default_content()
```
自动化测试程序
python 复制代码
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class Redirect:
    def __init__(self):
        self.driver = webdriver.Chrome()

    def Login(self,username,password):
        self.driver.get('http://127.0.0.1/mgr/sign.html')

        usernameElement = self.driver.find_element(By.ID, 'username')
        usernameElement.send_keys(username)
        sleep(2)

        passwordElement = self.driver.find_element(By.ID, 'password')
        passwordElement.send_keys(password)
        sleep(2)

        # 点击登录
        submitElement = self.driver.find_element(By.XPATH, "//div[@class='col-xs-12']/button")
        submitElement.click()
        sleep(2)
        print('登录成功~')

    def RedirectByhy(self):
        #mainWindow变量保存当前窗口的句柄
        mainWindow = self.driver.current_window_handle

        #定位跳转的新窗口链接
        iframe = self.driver.find_element(By.XPATH,'//footer/div/a')
        href = iframe.get_attribute('href')
        iframe.click()

        # 等待新窗口出现(窗口数量增加)
        WebDriverWait(self.driver, 10).until(EC.number_of_windows_to_be(2))
        #切换到新窗口
        for handle in self.driver.window_handles:
            if handle != mainWindow:
                self.driver.switch_to.window(handle)
                break



        self.driver.get(f'{href}')
        sleep(2)

        titleElements = self.driver.find_elements(By.XPATH,'//div[@id="nav-topics"]/a')
        for title in titleElements:
            print(title.text)
        print('【本次测试结束!!!!】')








if __name__ == '__main__':
    Re = Redirect()
    Re.Login('byhy','88888888')
    Re.RedirectByhy()
相关推荐
我的xiaodoujiao18 小时前
API 接口自动化测试详细图文教程学习系列24--如何用Pytest去设计接口测试用例并执行
python·学习·测试工具·pytest
U盘失踪了21 小时前
Browser Use — AI驱动浏览器自动化的全新范式
笔记·自动化
志栋智能21 小时前
超自动化安全:实现安全运营现代化的关键
大数据·运维·网络·安全·自动化
一次旅行1 天前
实战指南:基于开源工具链构建自动化演示文稿生成工作流
运维·开源·自动化
一拳一个娘娘腔1 天前
【SRC漏洞挖掘系列】第15期:自动化与AI赋能 —— 打造你的专属“漏洞挖掘机”
运维·人工智能·自动化
AC赳赳老秦1 天前
OpenClaw批量任务队列优化:解决任务堆积、执行缓慢、优先级混乱问题
java·大数据·数据库·c++·自动化·php·openclaw
半导体守望者1 天前
ADTEC AX-1000Ⅱ电源 RF电源等离子电源操作指南RF PLASMA GENERATOR
学习·机器人·自动化·制造·模块测试
weixin_468466851 天前
图像处理之亚像素边缘检测新手教程
图像处理·人工智能·自动化·图像分割·机器视觉·亚像素·光学系统
好名字更能让你们记住我1 天前
【接口自动化测试】博客系统接口自动化测试报告
python·功能测试·自动化·接口测试·接口自动化·测试覆盖率
zlinear数据采集卡1 天前
电源纹波无处遁形!工业采集卡电源去耦与滤波电路深度解析
c语言·嵌入式硬件·fpga开发·自动化·硬件架构