Selenium2+python自动化系列10-多窗口(第一季完)


(上海●悠悠) #1


前言    有些页面的链接打开后,会重新打开一个窗口,对于这种情况,想在新页面上操作,就得先切换窗口了。获取窗口的唯一标识用句柄表示,所以只需要切换句柄,我们就能在多个页面上灵活自如的操作了。

    本篇以打开百度新闻页面搜索按钮上的链接页面为例,依次打开每个按钮,并检验测试结果。用脚本批量操作,可以减少重复劳动,重复的事情让脚本去执行吧!

一、定位一组元素

    1.打开百度新闻页面:http://news.baidu.com/

    2.定位搜索框上一排按钮网页、贴吧,知道等

    3.定位一组元素方法在第八篇已经讲过,这里就不多讲,通过firebug可以查看他们有共同属性标签为a,且有个老爸为:<div class=“tab>



二、获取当前窗口句柄

    1.当点击百度新闻页面上“网页”按钮时,会打开一个新的窗口

    2.人为操作的话,可以通过点击窗口切换到不同的窗口上,但是脚本它不知道你要操作哪个窗口,这时候只能获取窗口唯一的标识:句柄

    3.获取当前页面的句柄:driver.current_window_handle



三、获取所有句柄

    1.先通过css定位到所有按钮:".tab>a"

    2.从定位的一组中随便取一个点击打开

    3.然后获取当前页面的所有句柄,发现此时有两个了



四、切换句柄

    1.循环判断是否与首页句柄相等

    2.如果不等,说明是新页面的句柄

    3.获取的新页面句柄后,可以切换到新打开的页面上

    4.打印新页面的title,看是否切换成功



五、关闭新窗口,切回主页

    1.打开新页面后,其实只想验证新页面跳转对不对,这里可以做个简单的验证,获取当前页面的title验证

    2.验证完后切关闭新窗口

    3.切回句柄到首页

    4.打印当前页面的句柄,看是否切换到首页了



六、批量操作

    1.把需要校验的结果放在list队列r里

    2.for循环遍历执行每个按钮的点击操作

    3.判断结果对应list里的每个结果



七、最终脚本

    1.整理后最终脚本如下,结果如图所示

# coding:utf-8

from selenium import webdriver

import time

driver = webdriver.Firefox()

driver.get(“http://news.baidu.com/”)

driver.implicitly_wait(10)

# 获取当前窗口句柄

h = driver.current_window_handle

# 定位网页、贴吧等链接

s = driver.find_elements_by_css_selector(".tab>a")

r = [u"百度一下", u"贴吧", u"知道", &nbsp;u"音乐",</p><p>&nbsp; &nbsp; &nbsp;u"图片", u"视频", u"地图", u"百科", u"文库"]

for a, b in zip(s, r):

    a.click()

    text = a.text

    time.sleep(2)

    all_h = driver.window_handles

    # 循环判断是否与首页句柄相等

    for i in all_h:

        if i != h:

            driver.switch_to.window(i)

            time.sleep(1)

    print driver.title

    if b in driver.title:

        print(text+u"页面打开正常")

    else:

        print(text+u"页面测试失败")

    driver.close()                       # 关闭当前页面

    driver.switch_to.window(h)           # 切回句柄到首页

driver.quit





不知不觉selenium已经出了十篇了,小伙伴们的学习热情也慢慢消退了,所以小编决定暂停selenium系列,第一季先告一段落。通过前面十篇的学习,基础的东西已经讲的差不多了,小伙伴们也看可以自己动手玩脚本了。小编先休息一阵子,过段时间出第二季,敬请期待哦~~




(nn) #2

跟着小编学习selenium的热情从来都不曾退却,每天都在期待着更新,期待第二季、、、
小编辛苦了,希望小编早点结束休息:grinning::grinning::grinning:广大人民群众需要你啊:grin::rose:


(深圳●☆★) #3

热情从未减退:joy:

悠悠出品,必属精品~~~


(凌风飞翔) #4

真心好分享,热情高涨,期待早日见到第二季!


(凌风飞翔) #5

请问如何定位到中的用户名和密码输入框,尝试多次都提示错误!


(云兰) #6

悠悠的文章看着总是很清晰,跟着操作几次总是能有所收获


(悠悠他哥) #7

小悠悠赶紧出第二季啊,哥哥已经迫不及待了!


(冰河) #8

悠悠姐加油!


#9

跟着小编学习selenium的热情从来都不曾退却,每天都在期待着更新,期待第二季、、、
小编辛苦了,希望小编早点结束休息广大人民群众需要你啊


(小猴子) #10

悠悠姐什么时候出第二季啊,迫不及待了:smile_cat:


(星辰大海) #11

大神们辛苦了,期待后续


(爱语默) #12

D:\test\venv1\Scripts\python.exe D:/test/test/test.py
百度一下,你就知道
网页页面打开正常
Traceback (most recent call last):
File “D:/test/test/test.py”, line 78, in
text = a.text
File “D:\Python\lib\site-packages\selenium\webdriver\remote\webelement.py”, line 68, in text
return self._execute(Command.GET_ELEMENT_TEXT)[‘value’]
File “D:\Python\lib\site-packages\selenium\webdriver\remote\webelement.py”, line 461, in _execute
return self._parent.execute(command, params)
File “D:\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py”, line 236, in execute
self.error_handler.check_response(response)
File “D:\Python\lib\site-packages\selenium\webdriver\remote\errorhandler.py”, line 192, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: no such session
(Driver info: chromedriver=2.35.528161 (5b82f2d2aae0ca24b877009200ced9065a772e73),platform=Windows NT 6.1.7601 SP1 x86_64)
循环一次就报错了,不知道什么原因,求大神知道,代码是一样的