#encoding=utf-8
import unittest
from selenium import webdriver
import time
import win32api, win32con VK_CODE ={'ctrl':0x11, 't':0x54, 'tab':0x09} # 键盘键按下
def keyDown(keyName):
win32api.keybd_event(VK_CODE[keyName], 0, 0, 0)
# 键盘键抬起
def keyUp(keyName):
win32api.keybd_event(VK_CODE[keyName], 0, win32con.KEYEVENTF_KEYUP, 0) # 封装的按键方法
def simulateKey(firstKey, secondKey):
keyDown(firstKey)
keyDown(secondKey)
keyUp(secondKey)
keyUp(firstKey) class TestDemo(unittest.TestCase):
def setUp(self):
# 获取浏览器驱动实例
self.driver = webdriver.Ie(executable_path = "e:\\IEDriverServer")
#self.driver = webdriver.Firefox(executable_path = "e:\\geckodriver")
def test_newTab(self):
# 等待3秒,等待浏览器启动完成
time.sleep(3)
# 使用for循环,再新开两个新的标签页
for i in range(2):
simulateKey("ctrl", "t")
# 通过Ctrl + tab组合键,将当前页面切换为默认页面,
# 也就是最先打开的标签页
simulateKey("ctrl", "tab")
# 访问搜狗首页
self.driver.get("http://sogou.com")
self.driver.find_element_by_id("query").send_keys(u"光荣之路")
self.driver.find_element_by_id("stb").click()
time.sleep(3)
#self.assertTrue(u"乔什•卢卡斯" in self.driver.page_source) # 获取所有的打开的窗口句柄
all_handles = self.driver.window_handles
print len(all_handles)
for handle in all_handles:
# 将当前窗口句柄切换至第二个标签页
self.driver.switch_to.window(handle)
print self.driver.title
if u"输入法" not in self.driver.page_source:
self.driver.get("http://www.baidu.com")
self.driver.find_element_by_id("kw").send_keys(u"WebDriver实战宝典")
self.driver.find_element_by_id("su").click()
time.sleep(3)
self.assertTrue(u"实战宝典" in self.driver.page_source)
elif (u"输入法" not in self.driver.page_source) and ("WebDriver" not in self.driver.page_source):
# 将当前窗口的句柄切换至第三个标签页
self.driver.get("http://www.iciba.com")
time.sleep(3)
self.assertTrue(u"查词" in self.driver.page_source) def tearDown(self):
# 退出浏览器
self.driver.quit() if __name__ == '__main__':
unittest.main()

基于火狐:

#encoding=utf-8
import unittest
from selenium import webdriver
import time
import win32api, win32con VK_CODE ={'ctrl':0x11, 't':0x54, 'tab':0x09} # 键盘键按下
def keyDown(keyName):
win32api.keybd_event(VK_CODE[keyName], 0, 0, 0)
# 键盘键抬起
def keyUp(keyName):
win32api.keybd_event(VK_CODE[keyName], 0, win32con.KEYEVENTF_KEYUP, 0) # 封装的按键方法
def simulateKey(firstKey, secondKey):
keyDown(firstKey)
keyDown(secondKey)
keyUp(secondKey)
keyUp(firstKey) class TestDemo(unittest.TestCase):
def setUp(self):
# 获取浏览器驱动实例
#self.driver = webdriver.Ie(executable_path = "e:\\IEDriverServer")
self.driver = webdriver.Firefox(executable_path = "e:\\geckodriver")
def test_newTab(self):
# 等待3秒,等待浏览器启动完成
time.sleep(3)
# 使用for循环,再新开两个新的标签页
for i in range(2):
simulateKey("ctrl", "t")
# 通过Ctrl + tab组合键,将当前页面切换为默认页面,
# 也就是最先打开的标签页
simulateKey("ctrl", "tab")
# 访问搜狗首页
self.driver.get("http://sogou.com")
self.driver.find_element_by_id("query").send_keys(u"光荣之路")
self.driver.find_element_by_id("stb").click()
time.sleep(3)
#self.assertTrue(u"乔什•卢卡斯" in self.driver.page_source) # 获取所有的打开的窗口句柄
all_handles = self.driver.window_handles
print len(all_handles)
# 将当前窗口句柄切换至第二个标签页
self.driver.switch_to.window(all_handles[1])
self.driver.get("http://www.baidu.com")
self.driver.find_element_by_id("kw").send_keys(u"WebDriver实战宝典")
self.driver.find_element_by_id("su").click()
time.sleep(3)
self.assertTrue(u"吴晓华" in self.driver.page_source) # 将当前窗口的句柄切换至第三个标签页
self.driver.switch_to.window(all_handles[2])
self.driver.get("http://www.baidu.com")
self.driver.find_element_by_id("kw").send_keys("selenium")
self.driver.find_element_by_id("su").click()
time.sleep(3)
self.assertTrue("www.seleniumhq.org" in self.driver.page_source) def tearDown(self):
# 退出浏览器
self.driver.quit() if __name__ == '__main__':
unittest.main()

webdriver高级应用- 浏览器中新开标签页(Tab)的更多相关文章

  1. window.open新打开窗口与新开标签页

    最近在使用window.open时忽略了一个细节问题:window.open新打开一个窗口,但是有时却是新打开一个窗口有时打开一个新标签页.虽然对一般的需求来说,这个两种情况都无所谓,但是对于那种有强 ...

  2. 利用localStorage实现浏览器中多个标签页之间的通信

    原理: localStorage是浏览器存储数据的容器,而且它是多页面共享的,利用localStorage多页面共享的特性,可以实现多个标签页的通信. 比如: 一个标签页发送消息(将发送的消息设置到l ...

  3. 利用cookie实现浏览器中多个标签页之间的通信

    原理: cookie是浏览器端的存储容器,而且它是多页面共享的,利用cookie多页面共享的特性,可以实现多个标签页的通信. 比如: 一个标签页发送消息(将发送的消息设置到cookie中),一个标签页 ...

  4. google浏览器打开新的标签页显示http://www.google.com.hk/url?sa=p&hl=zh-CN&……

    chrome的版本:51.0.2704.106 m使用该版本的chrome后,每次打开新标签页,都会提示“无法访问此网站”.并自动跳转到一个地址“http://www.google.com.hk/ur ...

  5. 利用webSocket实现浏览器中多个标签页之间的通信

    webSoket用来实现双向通信,客户端和服务端实时通信. webSoket优点和缺点? 优点:对于前端来说,使用简单,功能灵活,如果部署了webSocket服务器,可以实现实时通信. 缺点:需要服务 ...

  6. Python+Selenium练习篇之15-在浏览器中新开一个tab

    本文介绍如selenium方法打开一个新的tab,我们知道在浏览器里,我们按住 ctrl+ t 就可以新打开一个tab.所以我们学习如何利用webdriver中send_key 的方法去触发ctrl+ ...

  7. chrome打开收藏夹的网站在新的标签页

    chrome浏览器在新的标签页打开收藏夹的网址,现在设置不了,而且右键,在新标签页中打开有点烦..下面说说直接打开的方式. 方法1: 鼠标滚轮,直接点击收藏夹的网址,即可 方法2: ctrl + 鼠标 ...

  8. Google 浏览器设置打开超链接到新窗口标签页

    一.windows  按住Ctrl + 鼠标点击,在新窗口打开,停留在当前页面: 按住Ctrl + Shift + 鼠标点击,在新窗口打开,停留在新窗口: 登录Google账号,管理Google账号, ...

  9. Google浏览器设置搜索打开新的标签页

    每次用google搜索的时候,点击进去原来的搜索页面就不见了 ,其实可以设置打开新的标签页 1.登陆Chrome 2.登陆这个网址https://www.google.com/preferences ...

随机推荐

  1. html的文档设置标记上(格式标记)4-5

    <html> <head> <title>第四课的标题及第五课的标题</title> <meta charset="utf-8" ...

  2. Vue2.0 官方文档学习笔记

    VUE2.0官方文档 基础部分: 1.VUE简介 Vue是一个基于MVVM的框架,其中M代表数据处理层,V代表视图层即我们在Vue组件中的html部分,VM即M和V的结合层,处理M层相应的逻辑数据,在 ...

  3. Linux下软件安装的四种方式

    一.源码安装 步骤: 下载,解压源码(常见的源码打包格式:.tar.gz/.tar.bz2); 可以直接下载源码再上传至linux服务器,或者在联网状态下,直接通过wget等命令获取源码安装包;源码解 ...

  4. 本号讯 | 微软和百度携手推进全球自动驾驶技术; 微软发布新一代可垂直可水平滚动的Arc鼠标

    7 月 13 日,微软宣布了与宝马的最新合作进展,继语音助手 Cortana .云服务 Azure.Office 365 和微软 Exchange 安装在部分宝马车型后——Skype for Busi ...

  5. JavaScript_6_函数

    函数是由事件驱动的或者当它被调用执行的可重复使用的代码块 调用带参数的函数 带有返回值的函数 <!DOCTYPE html> <html> <head> <t ...

  6. 洛谷 P2733 家的范围 Home on the Range

    题目背景 农民约翰在一片边长是N (2 <= N <= 250)英里的正方形牧场上放牧他的奶牛.(因为一些原因,他的奶牛只在正方形的牧场上吃草.)遗憾的是,他的奶牛已经毁坏一些土地.( 一 ...

  7. UVA 110020 Efficient Solutions (STL)

    把一个人看出一个二维的点,优势的点就是就原点为左下角,这个点为右上角的矩形,包含除了右上角以外边界,其他任意地方不存在点. 那么所有有优势的点将会形成一条下凹的曲线. 因为可能有重点,用multise ...

  8. ansible 任务委派 delegate_to

    ansible 任务委派功能delegate_to run_noce: true  在一个主机上面只执行一次一个任务. ,如果没有这个参数的话,每个playbook中的组的主机都会执行一次. 我们有的 ...

  9. 手写IOC框架

    1.IOC框架的设计思路 ① 哪些类需要我们的容器进行管理 ②完成对象的别名和对应实例的映射装配 ③完成运行期对象所需要的依赖对象的依赖

  10. 2018.4.18 Ubuntu 的telnet命令详解

    Ubuntu 的telnet命令详解 1.作用用途 Telnet 命令通常用来远程登录,Telnet 程序是基于 Telnet 协议的远程登录客户端程序.Telnet 协议是TCP/IP协议族中的一员 ...