在实际定位元素的过程中,发现有一种情况让人很是恼火,根据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. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南)-L Bit Sequence

    题意 给你两个数l,m,大小为m的数组a,求[0,l]之间满足以下条件的数x的个数: 对于任何i输入[0,m-1],f(x+i)%2=a[i]:f(k):代表k在二进制下1的个数 m的范围<=1 ...

  2. 关于图计算&图学习的基础知识概览:前置知识点学习(Paddle Graph Learning (PGL))

    关于图计算&图学习的基础知识概览:前置知识点学习(Paddle Graph Learning (PGL)) 欢迎fork本项目原始链接:关于图计算&图学习的基础知识概览:前置知识点学习 ...

  3. LAL v0.32.0发布,更好的支持纯视频流

    Go语言流媒体开源项目 LAL 今天发布了v0.32.0版本.距离上个版本刚好一个月时间,LAL 依然保持着高效迭代的状态. LAL 项目地址:https://github.com/q19120177 ...

  4. 2022春每日一题:Day 21

    题目:[SCOI2007]降雨量 这题比较坑,分几种情况,但是可以总起来说,分开写,两个月份都没出现,maybe,否则如果两个月份都大于[l+1,r-1]的最大值,如果两个月份差值=r-l输出,tru ...

  5. gin-k8s 运行的问题

    1,k8s admin dashboard项目地址:https://github.com/kubernetes/dashboard项目使用的是golang 作为后端,然后使用angular 作为前段框 ...

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

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

  7. ArrayList中的ConcurrentModificationException,并发修改异常,fail-fast机制。

    一:什么时候出现? 当我们用迭代器循环list的时候,在其中用list的方法新增/删除元素,就会出现这个错误. package com.sinitek.aml; import java.util.Ar ...

  8. linux server设置开机自动连接WIFI

    1.前言 之前买了一个工控机,装过几个OS(linux 发行版),但是一直没有细研究过流程,只是停留在能用就不管了,工控机自带无线网卡(和俩个有线网口),所以这篇文章好好介绍如何开机自动连接WIFI( ...

  9. 解决can't compare offset-naive and offset-aware datetimes报错

    问题描述 在比较 <class 'datetime.datetime'> 类型时,抛出异常 原因 俩个做比较的,一个具有时区,一个不具有时区 解决 如果可以确认俩个时间都是本地时间可以将时 ...

  10. adb版本不同导致一个服务杀死另一个服务

    前言 由于我用安装模拟器进行调试app,需要连接到固定端口, 而开发测试的时候用到eclipse中调用sdk中包含一个版本的adb, 另外Android killer中也包含一个版本的adb, 另外我 ...