51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2121|回复: 6
打印 上一主题 下一主题

【版主分享】Selenium2(Webdriver)+Python处理浏览器多标签方法二则

[复制链接]
  • TA的每日心情
    开心
    2024-7-10 10:58
  • 签到天数: 194 天

    连续签到: 1 天

    [LV.7]测试师长

    跳转到指定楼层
    1#
    发表于 2017-4-1 10:31:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 Real_小T 于 2017-4-1 10:33 编辑

    我们在用Selenium遇到多个浏览器窗口或单个浏览器多个标签(Tab)的状况时,往往都不太好处理,这里将介绍两种处理方法。
    本文所引用的例子是百度,在百度首页下方有一个“把百度设为主页”的超链接,点击它会另起一个新标签页,是一个不错的例子:
    1.switch_to.window()
    该方法是Webdriver中内置的一个方法,除了在多个浏览器中作切换用,单个浏览器多个标签(Tab)之间的切换也可以用这个方法,思路就是先取得所有标签的句柄,然后循环遍历并判断是否是当前标签页,如果不是则切换。完整代码如下:
    1. # encoding:utf-8

    2. from selenium import webdriver

    3. driver = webdriver.Firefox()
    4. driver.get("http://www.baidu.com")
    5. driver.find_element_by_id("setf").click()
    6. handles = driver.window_handles
    7. for handle in handles:
    8.     if driver.current_window_handle != handle:
    9.         driver.switch_to.window(handle)
    10. driver.find_element_by_link_text("百度首页").click()
    复制代码

    最后一句点击新标签上的“百度首页”链接操作成功即代表已成功切换标签。
    2.利用JS清除target值
    用F12工具查看该超链接,可以查看到有一个target属性:

    target=_blank意思是在新窗口中打开被链接文档(引自w3school),通俗点解释就是超链接会用过新窗口(新标签)打开,那么将其值清除便可实现点击该超链接后不会另起一个新标签页。利用Document 对象方法查找该id然后将其target的值清除:
    1. js = 'document.getElementById("setf").target="";'
    复制代码

    JS写完之后执行它,即可达到效果。完整代码如下:
    1. # encoding:utf-8

    2. from selenium import webdriver

    3. driver = webdriver.Firefox()
    4. driver.get("http://www.baidu.com")
    5. js = 'document.getElementById("setf").target="";'
    6. driver.execute_script(js)
    7. driver.find_element_by_id("setf").click()
    8. driver.find_element_by_link_text("百度首页").click()
    复制代码

    最后一句点击新标签上的“百度首页”链接操作成功即代表已成功切换标签。
    HTML DOM 定义了多种查找元素的方法,除了 getElementById() 之外,还有 getElementsByName() 和 getElementsByTagName(),在http://www.w3school.com.cn/jsref/dom_obj_document.asp上有详细的用法。

    评分

    参与人数 1测试积点 +10 收起 理由
    lsekfe + 10 赞一个!

    查看全部评分

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏1
    回复

    使用道具 举报

  • TA的每日心情
    开心
    昨天 06:43
  • 签到天数: 2033 天

    连续签到: 1 天

    [LV.Master]测试大本营

    2#
    发表于 2017-4-1 11:02:16 | 只看该作者
    必须赞一个,平时并没有注意这么多,只知道能用就好。没有什么具体操作流程。学习啦。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2024-7-8 09:00
  • 签到天数: 943 天

    连续签到: 1 天

    [LV.10]测试总司令

    3#
    发表于 2017-4-1 12:01:48 | 只看该作者
    赞一个支持一下
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2018-3-6 10:11
  • 签到天数: 62 天

    连续签到: 1 天

    [LV.6]测试旅长

    5#
    发表于 2017-4-6 11:44:05 | 只看该作者
    支持分享,学到了
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-23 09:24 , Processed in 0.073018 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表