在实际定位元素的过程中,发现有一种情况让人很是恼火,根据xpath路径定位,感觉像是没错哦,但是执行时就来一个报错信息……为什么呢?

多表单切换

例如我们登录网易邮箱时就会发现,定位登录框时,一个嵌套的页面让定位变得如同相隔千山万水……

此时就需要切换表单来解救了:

惯例惯例~

# coding=utf-8

from selenium import webdriver

dr = webdriver.Chrome()

dr.get("https://mail.163.com/")

dr.switch_to_frame("x-URS-iframe")
dr.find_element_by_name("email").clear()
dr.find_element_by_name("email").send_keys("username")
dr.find_element_by_name("password").clear()
dr.find_element_by_name("password").send_keys("password")
dr.find_element_by_id("dologin").click()
dr.switch_to_default_content() dr.quit()

通过switch_to_frame切换到登录表单中,之后就可以按照之前定位元素的方法定位元素并输入信息了。

当然如果想切换回源页面,可以直接使用 switch_to_default_content() 返回默认的最外层页面中。

多窗口切换

还有的情况就需要仔细甄别了,是不是通过链接打开了一个新的窗口…

来来来,最近时事比较热的新闻来看一看~  

# coding=utf-8

import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC dr = webdriver.Chrome() dr.get("https://www.baidu.com")
dr.find_element_by_name("tj_trnews").click()
window_0 = dr.current_window_handle try:
element = WebDriverWait(dr, 10).until(EC.element_to_be_clickable(
(By.XPATH, '//*[@id="pane-news"]/div/ul/li[1]/strong/a')))
element.click()
window_1 = dr.current_window_handle
windows = dr.window_handles
print(window_0, window_1, "\n", windows) dr.switch_to_window(windows[-1]) window_1 = dr.current_window_handle
print(window_0, window_1, "\n", windows) time.sleep(5) finally:
dr.quit()

通过上述代码执行,可以看出,我为了打开百度新闻的热点新闻中的头条真的真的做出了一系列努力

代码中结合之前学习的显示等待,因为在测试过程执行的过程中发生了百度新闻的页面未完成加载未能找到热点新闻对应的元素的情况,自然也就无法定位给出了报错信息,心想继续使用time.sleep(5)着实是有点low,用上之前学习的显式等待吧。

在执行过程中,模拟鼠标点击热点新闻的第一行之后看到打开了一个新的标签页,但是我们通过 current_window_handle 查看当前窗口的句柄时,发现虽然打开了新的标签页,但是焦点并未聚焦于新的标签页,仍旧停留在原始页面,如果需要在新的页面中执行操作,怎么办?

通过 windows = dr.window_handles 获取所有窗口页面的句柄,再通过 dr.switch_to_window(windows[-1]) 切换到最新的窗口页面,此时再来查看当前的窗口句柄,就发现,已然切换成功了,有成就感~

Python3+Selenium3自动化测试-(七)的更多相关文章

  1. Python3+Selenium3自动化测试-(二)

    python3 元素定位和操作方法总结 # coding=utf-8 ''' #8种元素定位方法 find_element_by_id() find_element_by_name() find_el ...

  2. Python3+Selenium3自动化测试-(五)

    这里来说一说selenium中的等待方式,其实在webdriver只有两种类型等待方式,显式等待和隐式等待,之前是在程序运行过程中使用time模块中的sleep进行代码的休眠进行强制等待,是显式等待中 ...

  3. Python3+Selenium3自动化测试-(四)

    selenium鼠标事件 # coding=utf-8 import time from selenium import webdriver from selenium.webdriver.commo ...

  4. Python3+Selenium3自动化测试-(三)

    selenium键盘事件 #coding=utf-8 from selenium import webdriver import time from selenium.webdriver.common ...

  5. Python3+Selenium3自动化测试-(一)

    完成环境的安装并测试之后,我们对Selenium有了一定的了解了,接下来我们继续驱动浏览器做一些基本操作: 窗口尺寸设置.网页截图.刷新.前进和后退 窗口尺寸设置 在测试过程中,我们可能会要求打开浏览 ...

  6. Selenium3自动化测试【27】Frame的操作

    本篇文章内容摘要 " 讲解Python3+Selenium3如何处理Frame窗体" 同步视频知识与系列知识内容,可关注:[公众号]:柒哥测试:[WX]:Lee-890;[视频号] ...

  7. Python3+unitest自动化测试初探(中篇)

    目录 6.生成测试报告 7.编写邮件发送工具 8.发送邮件 发布 0 86 编辑 删除 Python3+unitest自动化测试初探(中篇)(2019-04-18 01:41) 发布 3 245 编辑 ...

  8. Python3+unitest自动化测试初探(下篇)

    目录 9.用例结果校验 10.跳过用例 11.Test Discovery 12.加载用例 unittest官方文档 本篇随笔承接: Python3+unitest自动化测试初探(中篇) Python ...

  9. 从零开始学习PYTHON3讲义(七)条件分支和哥德巴赫猜想

    <从零开始PYTHON3>第七讲 人生是由无数个选择组成,每个选择都有不同的限定条件.现在来说人生有点早是吧:)不过事实的确是这样的. 程序也充满着选择,满足不同的条件,则运行不同的运算. ...

  10. Python3 Selenium自动化测试赋值出现:WebDriverException: Message: unknown error: call function result missing 'value'

    Python3 Selenium自动化测试赋值出现:WebDriverException: Message: unknown error: call function result missing ' ...

随机推荐

  1. k8s集群正常kubectl用不了

    今天有个客户反馈k8s集群服务正常,业务也正常.kubectl get no敲入这个命令就有夯住了 仔细去检查配置发现少了一个config 最后在master-2上的config文件cp拷一份过来问题 ...

  2. 云原生之旅 - 5)Kubernetes时代的包管理工具 Helm

    前言 上一篇文章 [基础设施即代码 使用 Terraform 创建 Kubernetes] 教会了你如何在Cloud上面建Kubernetes资源,那么本篇来讲一下如何在Kubernetes上面部署应 ...

  3. 现在入行Java真的还有出路吗?

    现在入行Java还来的及吗?未来该如何抉择? 最近有点迷茫了,互联网好像一夜之间进入了寒冬一样,到处都是就业难的样子,当然,不可否认的是,那些努力的大佬依旧是斩获多个offer,但是,窝就一个小镇做题 ...

  4. <六>指向类成员的指针

    指向类成员(成员变量和成员方法)的指针 1:定义一个指针指向类的普通成员变量 示例代码1 点击查看代码 class Test2{ public: int ma; static int mb; void ...

  5. 面试官不按套路,竟然问我Java线程池是怎么统计线程空闲时间?

    背景介绍: 你刚从学校毕业后,到新公司实习,试用期又被毕业,然后你又不得不出来面试,好在面试的时候碰到个美女面试官! 面试官: 小伙子,我看你简历上写的项目中用到了线程池,你知道线程池是怎样实现复用线 ...

  6. zabbix6.0安装

    一.简述 zabbix6.0 对相关软件版本要求较高,需要php7.25以上php8.0以下版本支持,若使用mysql数据库,其最低要求为mysql8.0,本此搭建采用的是使用较广的lnmp架构 za ...

  7. ROS应用层通信协议解析

    参考:http://wiki.ros.org/ROS/Master_API http://wiki.ros.org/ROS/Connection Header 说明 ROS本质上就是一个松耦合的通信框 ...

  8. virtual继承和不继承

    用virtual修饰的虚函数,用来继承重写,没有virtual修饰的,取决于父类 定义 父类 *x=new 子类 首先父类不能调用子类的函数,自能调用本身的函数,所以,只有两种情况,1.无virtua ...

  9. UEFI引导linux启动过程的顺序,及修改办法

    注意这里我说的是 uefi 启动 启动过程顺序 正常安装完一个Linux系统,硬盘会被分成俩个分区,一块是 fat32 文件系统(启动项存放位置),一块是ext4 文件系统(也就是系统真正的安装位置) ...

  10. PGL图学习之项目实践(UniMP算法实现论文节点分类、新冠疫苗项目实战,助力疫情)[系列九]

    原项目链接:https://aistudio.baidu.com/aistudio/projectdetail/5100049?contributionType=1 1.图学习技术与应用 图是一个复杂 ...