在实际定位元素的过程中,发现有一种情况让人很是恼火,根据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. 2.-url和视图函数

    一.URL-结构 1.定义:统一资源定位符 Uniform Resource Locator 2.作用:用来表示互联网上某个资源地址 3.URL的一般语法格式为(注:[]代码其中的内容可以省略): 格 ...

  2. apijson 初探

    apijson 初探 本文试着用 5W1H 方式切入,试图快速建立自己对 apijson 的整体认知,所以这不是一趟快速入门的 demo 之旅,而是显得比较务虚的探索式知识体系整合过程. 持续更新中. ...

  3. 《ASP.NET Core技术内幕与项目实战》精简集-目录

    本系列是杨中科2022年最新作品<ASP.NET Core技术内幕与项目实战>及B站配套视频(强插点赞)的精简集,是一个读书笔记.总结和提炼了主要知识点,遵守代码优先原则,以利于快速复习和 ...

  4. 2021年WebStorm安装破解教程

    一.WebStorm工具介绍 WebStorm是一款JavaScript 开发工具,为JavaScript和编译到JavaScript语言.Node.js.HTML和CSS提供了智能编码帮助.享受代码 ...

  5. docker使用bind9实现域名解析

    目录 刷新服务 修改配置文件 从 114 缓存 查询 数据 可以 dig 无法 ping 查看 已经 区域 解析,并添加 新的 解析 项 在 linux 安装 局域网 cert rndc 查看 默认的 ...

  6. 【Java并发010】使用层面:发令枪CountDownLatch全解析

    一.前言 CountDownLatch是在java1.5被引入,存在于java.util.cucurrent包中,跟它一起被引入的工具类还有CyclicBarrier.Semaphore.concur ...

  7. toB应用私有化交付发展历程、技术对比和选型

    由于数据隐私和网络安全的考虑,大多数toB场景的客户需要私有化应用交付,也就是需要交付到客户的环境里,这样的客户有政府.金融.军工.公安.大型企业.特色行业等,这些私有化场景限制很多,如何提高私有化应 ...

  8. Redux 的困扰与如何技术选型

    文章的名字我想了很久,备选项有"我再不推荐 Redux","Redux 为什么令我头疼","Redux 进化启示录"等等.通过这一系列名字我 ...

  9. day07 方法重写&super、this、static关键字&JVM的类加载顺序题目

    day07 方法重写 1)重写发生在子父类当中 2)方法名.参数列表.返回值均相同 3)重写的方法,方法体或者访问控制修饰符不同 4)子类方法的访问权限不能缩小,比如父类是int,子类重写权限不能是b ...

  10. UBOOT 启动流程

    一.概述 uboot 的启动流程在网上有很多大佬记录,但是了对于像我这样的新手就有些困难了,而我也不做 uboot 相关的工作,所以没必去研究代码,这里我特意整理了一下,以流程图的形式展现代码执行的流 ...