专栏首页从零开始学自动化测试Selenium2+python自动化29-js处理多窗口

Selenium2+python自动化29-js处理多窗口

前言

在打开页面上链接的时候,经常会弹出另外一个窗口(多窗口情况前面这篇有讲解:Selenium2+python自动化13-多窗口、句柄(handle)),这样在多个窗口之间来回切换比较复杂,那么有没有办法让新打开的链接在一个窗口打开呢?

要解决这个问题,得从html源码上找到原因,然后修改元素属性才能解决。很显然js在这方面是万能的,于是本篇得依靠万能的js大哥了。

一、多窗口情况

1.在打baidu的网站链接时,会重新打开一个窗口

(注意:我的百度页面是已登录状态,没登录时候是不会重新打开窗口的)

二、查看元素属性:target="_blank"

1.查看元素属性,会发现这些链接有个共同属性:target="_blank"

三、去掉target="_blank"属性

1.因为此链接元素target="_blank",所以打开链接的时候会重新打开一个标签页,那么解决这个问题,去掉该属性就可以了。

2.为了验证这个问题,可以切换到html编辑界面,手动去掉“_blank”属性

3.删除“_blank”属性后,重新打开链接,这时候会发现打开的新链接会在原标签页打开。

四、js去掉target="_blank"属性

1.第一步为了先登录,我这里加载配置文件免登录了(不会的看这篇:Selenium2+python自动化18-加载Firefox配置)

2.这里用到js的定位方法,定位该元素的class属性

3.定位到该元素后直接修改target属性值为空

五、参考代码

# coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

# 加载配置文件免登录
profileDir = r'C:\Users\Gloria\AppData\Roaming\Mozilla\Firefox\Profiles\1x41j9of.default'
profile = webdriver.FirefoxProfile(profileDir)
driver = webdriver.Firefox(profile)

driver.get("https://www.baidu.com/")

# 修改元素的target属性
js = 'document.getElementsByClassName("mnav")[0].target="";'
driver.execute_script(js)
driver.find_element_by_link_text("糯米").click()

注意:并不是所有的链接都适用于本方法,本篇只适用于有这个target="_blank"属性链接情况

本篇仅提供解决问题的办法和思路,不要完全照搬代码!!!

本文分享自微信公众号 - 从零开始学自动化测试(yoyoketang),作者:YOYO

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-02-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Cypress web自动化27-Debugging调试你的代码

    在写脚本的过程中,有时候会遇到一些问题需要慢慢调试找出原因,Cypress 提供了调试的方法,方便我们快速定位到问题

    上海-悠悠
  • pytest文档42-fixture参数化params

    参数化是自动化测试里面必须掌握的一个知识点,用过 unittest 框架的小伙伴都知道使用 ddt 来实现测试用例的参数化。 pytest 测试用例里面对应的参...

    上海-悠悠
  • selenium+python自动化93-鼠标事件(ActionChains)源码详解

    ActionChains简介 actionchains是selenium里面专门处理鼠标相关的操作如:鼠标移动,鼠标按钮操作,按键和上下文菜单(鼠标右键)交互。...

    上海-悠悠
  • 520忌加班,宜表白程序媛!《北京编程女子图鉴》给你攻略

    导读:随着电视剧《北京女子图鉴》的热播,官方发布任一消息都能引起热议,其中在一张官宣海报上,女主打扮精致干练站在中央,身后有11名男性,这海报引起观众对剧情更多...

    华章科技
  • 内网渗透

    外网更侧重于找漏洞寻找突破口 举个简单的例子: 把渗透测试当做去偷某家超市的某个商品。外网渗透就是突破超市的大门,进入超市。

    宸寰客
  • [C-C++]获取系统时间

    不过当计算算法耗时的时候,不要忘记second,不能只要用Milliseconds来减,不然后出现负值,若是算法耗时太长就得用minutes啦。再不然,就hou...

    祥知道
  • TCPCopy 线上流量复制工具

    TCPCopy是一种重放TCP流的工具,使用真实环境来测试互联网服务器上的应用程序。

    测试开发社区
  • Qt学习笔记 TableWidget使用说明和增删改操作的实现

    看一下效果很简单的一个小功能 ? 先说分部讲一下过程 再给出详细代码  添加数据 MainWindow::MainWindow(QWidget *parent)...

    lpxxn
  • Gradle依赖管理解析

    当我们在讨论依赖时,通常指的是外部依赖,例如其他开发者提供的依赖库。手动管理依赖会是一个大麻烦。你必须找到该依赖,下载JAR文件,将其拷贝到项目,引用它。通常这...

    博文视点Broadview
  • Google最新论文:Youtube视频推荐如何做多目标排序

    本文提出了一套大规模多目标排序框架应用于Youtube视频推荐平台。众所周知,Youtube视频推荐面临着众多的挑战,包括需要解决多个互相竞争的排序目标、以及用...

    AI科技大本营

扫码关注云+社区

领取腾讯云代金券