窗口切换

handles = driver.window_handles ------获取所有窗口句柄,返回的数据是一个列表类型

driver.switch_to.window(handles[-1]) -----切换窗口,因为返回的数据是列表类型,所以可以根据索引进行切换

窗口等待和window窗口切换

----点击打开新窗口的时候,需要又一个等待的过程;避免窗口没有打开就进行接下来的元素查找,程序报错

WebDriverWait(driver, 30).until(EC.new_window_is_opened(before_handles))

-----等待用的还是之前说的现实等待的句式,条件换成new_window_is_opend.

-----这里的locator是before_handles,就是点击打开新窗口之前的所有窗口句柄;理论来说,点击打开一个新窗口后再获取所有窗口句柄,得到的值肯定会比点击之前多,这样才能符合new_window_is_open这个函数。所以before_handles一定是在点击打开新窗口这个操作之前获取的

---获取当前窗口句柄 driver.current_window_handle

ps:等待只是等待,不具备切换功能,即等待新窗口打开后,当前窗口句柄还是之前的,不会是新打开的那个窗口!

iframe切换

  1. iframe切换有3种方式:索引/name/webelement

1.1 通过name切换

driver.switch_to.frame("baidu")

1.2 通过webelement切换

iframe_element = driver.find_element_by_xpath('//iframe[@name="baidu"]')

driver.switch_to.frame(iframe_element)

frame等待,等待后自动完成切换

WebDriverWait(driver, 10).until(

EC.frame_to_be_available_and_switch_to_it((By.XPATH, '//iframe[@name="baidu"]')))

  1. 退出iframe,切换回主页面---记住切换回主页面,不然无法定位主页面元素

    driver.switch_to.default_content()

  2. 如果有多个iframe嵌套,如何切换到父级iframe

    driver.switch_to.parent_frame()

  3. 如何判断需要定位的元素是否在iframe里面

    在浏览器查看源码的时候,通过元素定位,然后查看下面元素框,如果有iframe,那么这个元素就是在iframe里面的

定位alert

1 切换到alert,switch_to后面不需要再加括号 driver.switch_to.alert

2. 点击alert的确认按钮 driver.switch_to.alert.accept()

3. 点击alert的取消按钮 driver.switch_to.alert.dismiss()

4. alert等待 WebDriverWait(driver, 10).until(EC.alert_is_present())

点击确认或者取消后,就关闭了弹窗,直接返回的主页面;同一时间内只会弹出一个alert

如何区分是alert还是一个普通元素----通过浏览器定位,可以定位到的就是元素,定位不到的就是alert

最新文章

  1. Projects\Portal_Content\Indexer\CiFiles文件夹下文件占用磁盘空间过大问题。
  2. (原创)即使最可怕的自然力量,也不失美丽——火山喷发(摄影,欣赏)
  3. rabbitmq+ keepalived+haproxy高可用集群详细命令
  4. discuz+ecmall+phpcms整合
  5. Python实现Linux下文件查找
  6. Java学习笔记--多线程
  7. 关于foo的一个面试题
  8. Runtime之NSCoding的自动归档、接档
  9. c++ --> 你可能不知道的c++
  10. Konckout开发实例:简单的表单提交页面
  11. 通过wget工具下载指定文件中的URLs对应的资源并保存到指定的本地目录中去并进行文件完整性与可靠性校验
  12. Tips_一级菜单栏实现
  13. mysql数据库的基本操作:创建数据库、查看数据库、修改数据库、删除数据库
  14. 使用Coverage进行代码覆盖率的测试
  15. 转载:MVC升级以后出现"当前上下文中不存在ViewBag"的问题解决
  16. python-函数参数不固定
  17. c++中文件读取
  18. mybatis与hibernate常用的持久化类,及sqlsession和sqlsessionTemplate区别
  19. EhLib的行Checkbox
  20. hadoop最新版本介绍之dkhadoop版本选择

热门文章

  1. 记录坑:Chrome谷歌浏览器最小化和页面遮挡后JS代码不稳定
  2. 关于flex元素超出父元素的解决方法
  3. spider_ip代理
  4. el-table实现翻页选择和回看
  5. 利用Canal投递MySQL Binlog到Kafka
  6. 一、Java简单概述
  7. idea引入ojdbc包报错
  8. get 和 post 请求在缓存方面的区别
  9. ConcurrentHashMap在Java8中的变化
  10. nchu第二次面向对象编程博客作业