多窗口处理

点击某些链接,会重新打开一个窗口,对于这种情况。想在薪页面操作,就得先切换窗口了。

获取窗口得唯一标识用句柄表示,所以只需要切换句柄,就可以在多个页面进行操作了

1、 先获取到当前得窗口句柄(drive.current_window_handle)

2、 再获取到所有得窗口句柄(drive.window_handles)

3、 判断是否是想要操作得窗口,如果是,就可以对窗口进行操作,如果不是。就跳转到另外一个窗口,对另一个操作进行操作(drive.switch_to_window)

Demo

操作步骤

1、打开百度,

2、点击登录

3、在弹出框点击注册账号

4、跳到注册账号页,输入用户名和账号

5、返回第一个登录页

6、在登录页输入账号密码,点击登录

  1. import pytest
  2. import time
  3. from selenium import webdriver
  4. from selenium.webdriver.chrome.options import Options
  5. from selenium.webdriver.support.wait import WebDriverWait
  6. from selenium.webdriver.support import expected_conditions
  7. from selenium.webdriver.common.by import By
  8. from selenium.webdriver import ActionChains
  9. from selenium.webdriver.support import expected_conditions as EC
  10. from selenium.webdriver.common.keys import Keys
  11. from selenium.webdriver import TouchActions
  12. class TestActions:
  13. def setup(self):
  14. self.chrome_options = Options()
  15. self.chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222") # 指定配置好的 chrom
  16. self.chrome_options.add_experimental_option("w3c", False)
  17. self.chrome_driver = r"./chromedriver.exe" # 驱动路径
  18. self.driver = webdriver.Chrome(self.chrome_driver, chrome_options=self.chrome_options) # 加入驱动设置
  19. # self.driver.get('https://sahitest.com/demo/clicks.htm') # 发起请求
  20. # self.driver.maximize_window() # 设置为最大化
  21. self.driver.implicitly_wait(3) # 添加一个隐式等待默认等待3秒
  22. def teardown(self):
  23. print('关闭浏览器')
  24. # time.sleep(1)
  25. # self.driver.quit()
  26. def test_login(self):
  27. url = 'https://www.baidu.com/'
  28. self.driver.get(url) # 发起请求
  29. self.driver.find_element_by_xpath("//a[@id='s-top-loginbtn']").click() # 点击登录
  30. self.driver.find_element_by_xpath("//a[contains(text(),'立即注册')]").click() # 点击立即注册
  31. print(self.driver.window_handles) # 查看目前有几个页面
  32. window1 = self.driver.current_window_handle # 目前选中得页面
  33. self.driver.switch_to_window(self.driver.window_handles[-1])
  34. window2 = self.driver.current_window_handle # 选择新打开得页面
  35. print(window2, window1)
  36. # 在第二个页面输入账号密码
  37. self.driver.find_element_by_xpath("//input[@id='TANGRAM__PSP_4__userName']").send_keys('1311111')
  38. self.driver.find_element_by_xpath("//input[@id='TANGRAM__PSP_4__phone']").send_keys('1311111')
  39. # 返回第一个页面,然后点击立即登录
  40. self.driver.switch_to_window(window1) # 因为上面步骤已经将window1记录了下来,所以可以直接选择window1
  41. self.driver.find_element_by_xpath("//p[@id='TANGRAM__PSP_11__footerULoginBtn']").click() # 点击登录
  42. self.driver.find_element_by_xpath("//input[@id='TANGRAM__PSP_11__userName']").send_keys("lakes") # 输入账号
  43. self.driver.find_element_by_xpath("//input[@id='TANGRAM__PSP_11__password']").send_keys("lakes") # 输入密码
  44. self.driver.find_element_by_xpath("//input[@id='TANGRAM__PSP_11__submit']").click() # 点击登录
  45. if __name__ == '__main__':
  46. pytest.main(['-vs', "test_action.py::TestActions"])

frame的处理

在web自动化中,如果一个元素定位不到,那么很大可能这个元素在iframe中

Frame分类

标签主要表现为 : frameset、frame、 iframe 三种

frame 存在两种

  • 一种是嵌套的,一种是未嵌套的

切换嵌套的frame

  • driver.switch_to.frame() # 根据元素id或者index 切换成frame
  • driver.switch_to.default_content() # 切换到默认的frame
  • driver.stitch_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, 就可以通过selenium的定位定位到

selenium 多窗口处理与网页frame的更多相关文章

  1. Python3 Selenium多窗口切换

    Python3 Selenium多窗口切换 以腾讯网(http://www.qq.com/)为例,打开腾讯网,点击新闻,打开腾讯新闻,点击新闻中第一个新闻链接. 在WebDriver中封装了获取当前窗 ...

  2. scrapy和selenium结合抓取动态网页

    1.安装python (我用的是2.7版本的) 2.安装scrapy:   详情请参考 http://blog.csdn.net/wukaibo1986/article/details/8167590 ...

  3. Python+Selenium学习--窗口切换及操作元素

    场景 有时候我们在测试一个web 应用时会出现多个浏览器窗口的情况,在selenium1.0 中这个问题比较难处理.webdriver 提供了相关相方法可以很轻松的在多个窗口之间切换并操作不同窗口上的 ...

  4. selenium webdriver窗口切换(上)

    selenium webdriver窗口切换,有时候在做自动化的时候需要打开很多很多的页面, 当在操作不同的页面的时候需要切换窗口,下面是如何切换到前后页面窗口的操作: package test201 ...

  5. python3 + selenium 之窗口切换

    窗口切换 此代码来源学习后对淘宝操作实践记录: 以下代码在Chrome61和IE11上正常运行,Firefox5.7上运行存在一些问题须改进,应该是火狐不兼容差link_text部分和循环经常报错,在 ...

  6. selenium 多窗口(windows)及ITargetLocator使用总结

    1. selenium能实现窗口切换的原理 2. 常见命令 2.1 WindowHandle 2.2 WindowHandles 2.3 SwitchTo 3. 使用JavaScript新建窗口 4. ...

  7. selenium切换窗口

    在做网页自动化测试的时候,难免会打开很多个网页,那么,如何在多个窗口之间切换呢? 获取窗口的唯一标识用句柄(handle)表示,因此只需要切换句柄,就可以灵活的在各窗口之间切换. 下面介绍几个方法 c ...

  8. 爬虫-----selenium模块自动爬取网页资源

    selenium介绍与使用 1 selenium介绍 什么是selenium?selenium是Python的一个第三方库,对外提供的接口可以操作浏览器,然后让浏览器完成自动化的操作.     sel ...

  9. 自动化测试基础篇--Selenium多窗口、句柄问题

    摘自https://www.cnblogs.com/sanzangTst/p/7680402.html 有时我们在打开浏览器浏览网页时,当点击网页上某些链接时,它不是直接在当前页面上跳转,而是重新打开 ...

  10. selenium webdriver窗口切换(下)

    多窗口切换有时候需要在不同的窗口切换,从而操作不同的窗口上的元素.在selenium1.0 中这个问题比较难处理.但WebDriver 提供了switcTo.window()方法可以切换到任意的窗口. ...

随机推荐

  1. 什么是互联网控制消息协议ICMP 以及如何作为网络分析利器

    什么是互联网控制消息协议(ICMP) Internet控制消息协议(ICMP)是网络设备用来诊断网络通信问题的网络层协议.ICMP主要用于确定数据是否及时到达其预期目的地.通常,ICMP协议用于网络设 ...

  2. 将map转成vo实体

    //将map转成vo实体 AssetManagementProductsVO param= JSON.parseObject(JSON.toJSONString(map), AssetManageme ...

  3. 关于rust cargo下载依赖慢的解决方法(转载)

    网址: https://zhuanlan.zhihu.com/p/74875840?from_voters_page=true win环境基本输入两个命令就好了 $env:http_proxy=&qu ...

  4. ISCTF 2022

    Re SigninReverse ida 64 位 打开程序,即可获得flag ISCTF{27413241-9eab-41e2-aca1-88fe8b525956} ezbase # coding= ...

  5. 控制论个人学习笔记-线性系统的校正方法&现代控制论基础

    note 2020-08-05搬运 下面的内容来自(我的CSDN博客)[https://blog.csdn.net/weixin_45183579/article/details/105201314] ...

  6. aspnetcore微服务中使用发件箱模式实例

    aspnetcore微服务种服务之间的通信一般都有用到消息中间件,如何确保该服务的持久层保存创建的数据同时又把消息成功投递到了关联服务,关联服务做对应的处理. 下面就以一个简单的例子来演示实现方式之一 ...

  7. 003-Cruehead-CrackMeV3

    第二个需要写注册机 首先查看文件,打开文件,什么也没有,help ->about,弹出下面的弹窗 看来是没有什么线索,直接放进OD里面 这里有一个函数CreatFileA,这个函数目的是访问一个 ...

  8. [ElasticSearch] ES集群状态由非正常状态(red)恢复为正常状态(green)的思路与实践

    1 场景描述 1.1 资源与原规划 三台主机组成ES集群的规划: 集群名: xxx_elastic 172.15.3.7 es1 master 172.15.3.8 es2 (非master) 172 ...

  9. 【Voyage】GDOI 2023 旅游记 || ECHO.

    \(\color{#FFFFFF}{那是什么样的旅途呢}\) \(\color{#FFFFFF}{真的会害怕很多东西呢.想想害怕的其实不止这样一件事,便产生了"其实都一样没关系的,都应该踏过 ...

  10. Numpy浅拷贝与深拷贝

    Numpy中的浅拷贝与深拷贝 浅拷贝 共享内存地址的两个变量,当其中一个变量的值改变时另外一个也随之改变. Example a = np.array([1, 2, 3, 4, 5]) b = a pr ...