webdriver高级应用- 浏览器中新开标签页(Tab)

#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()

原文地址:https://www.cnblogs.com/qingqing-919/p/8716576.html

时间: 2024-10-01 21:04:54

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

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

最近在使用window.open时忽略了一个细节问题:window.open新打开一个窗口,但是有时却是新打开一个窗口有时打开一个新标签页.虽然对一般的需求来说,这个两种情况都无所谓,但是对于那种有强烈区分的需求来说还是要注意的.那么怎么会出现这种不同的打开情况呢,这要从window.open方法的用法和不同浏览器来区分. 1.window.open的用法容易忽视的细节 window.open方法有三个参数: window.open(url, [name], [configuration]) 其

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

原理: cookie是浏览器端的存储容器,而且它是多页面共享的,利用cookie多页面共享的特性,可以实现多个标签页的通信. 比如: 一个标签页发送消息(将发送的消息设置到cookie中),一个标签页接收消息(从cookie中获取消息) 例子:   01 发送消息的标签页(其实就是将要发送的消息设置到cookie中) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-

js打开新的标签页

CreateTime--2017年8月23日11:42:39Author:Marydon window.open(URL) 举例: <!-- 方式一:推荐使用 --> <a href="javascript:;" onclick="window.open('<c:url value="/uploadfile/134557/000225326/进击的巨人-三笠.jpg"/>')"> 操作js打开新的标签页 <

bootstrap标签页(Tab)插件

标签页(Tab)在Bootstrap导航元素一章中简介过,通过结合一些data属性,您可以轻松地创建一些标签页界面.通过这个插件您可以把内容放置在标签页或胶囊式标签页甚至是下拉菜单标签页中. 用法 您可以通过以下两个方式来启用标签页 1.通过data属性:您需要添加data-toggle="tab"或data-toggle="pill"到锚文本链接中.例如: <!DOCTYPE html><html><head><meta

C++ CEF 浏览器中显示 Tooltip(标签中的 title 属性)

在 Windows 中将 CEF 集成到 C++ 客户端以后,默认是无法显示 tooltip 的,比如图片标签中的 title 属性. 实现的方式其实很简单,按下面的步骤操作就可以: 创建一个文本文件,文件名为 app.manifest,内容如下,将这个文件放到源代码文件夹 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="

web前端中实现多标签页切换的效果

在这里,实现多标签页效果的方法有两个,一个是基于DOM的,另一个是基于jquery的,此次我写的是一个对于一个电话套餐的不同,显示不同的标签页 方法一: 首先,我们要把页面的大体框架和样式写出来,html和css代码如下: <ul id="tab">    <li id="tab1" onclick="show(1)">10元套餐</li>    <li id="tab2" oncli

浅谈两种方法实现浏览器内多个标签页之间的通信

调用localstorge.cookies等本地存储方式. 方法一: localstorge在一个标签页里被添加.修改或删除时,都会触发一个storage事件,通过在另一个标签页里监听storage事件,即可得到localstorge存储的值,实现不同标签页之间的通信. <input id="name"> <input type="button" id="btn" value="提交"> <scr

bootstrap标签页(Tab)插件事件

事件 下表列出了标签页(Tab)插件中要用到的事件.这些事件可在函数中当钩子使用. 事件 描述 实例 show.bs.tab 该事件在标签页显示时触发,但是必须在新标签页被显示之前.分别使用 event.target 和event.relatedTarget 来定位到激活的标签页和前一个激活的标签页. $('a[data-toggle="tab"]').on('show.bs.tab', function (e) { e.target // 激活的标签页 e.relatedTarget

bootstrap 标签页tab切换js(含报错原因)

booststrap 标签页的tab切换,相信大家已经都很熟悉了,在boot官网示例以及其他网站已经很多罗列相关代码的了,这里就不赘述了.这里主要贴下让boot标签页默认显示哪个标签页的js. 主要留作自己工作备忘. 1 $('a[data-toggle="tab"]') 2 $('#myTab a[href="#profile"]').tab('show') 3 $('#myTab a:first').tab('show') 4 $('#myTab a:last'