selenium-webdriver循环点击百度搜索结果以及获取新页面的handler
webdriver还是很有意思的,之前用过Ruby的watir的自动化测试框架,感觉selenium的这套框架更好一些,很容易就可以上手。我虽然不做自动化这块,不过先玩玩再说,多学点东西总之还是好一些的。
# coding:utf-
import time
from selenium import webdriver
import unittest
from pythontest.commlib.baselib import * #引用封装后的日志系统
log = TestLog().getlog()
class BaiBu(unittest.TestCase):
u'''【百度.类】'''
def setUp(self):
self.browser = webdriver.Firefox()
self.browser.get("http://www.baidu.com")
self.browser.implicitly_wait()
#self.base = Screen(self.browser) def tearDown(self):
self.browser.quit() def test_search(self):
log.info("搜索前title:" + self.browser.title.encode("utf-8") ) #得到的title中文编码格式,非UTF-8格式,需要转码
#输入关键字,关键字任意
self.browser.find_element_by_class_name("s_ipt").send_keys(u"北京尚拓云测 软件测试外包公司")
self.browser.find_element_by_class_name("s_btn").submit() #此处class属性有三个值,中间使用空格隔开,取其中一值
#点击搜索结果
self.browser.find_element_by_xpath(".//*[@id='2']/h3/a").click() #根据xpath识别元素
time.sleep()
log.info("结果页:" + self.browser.title.encode("utf-8") ) #转码utf-
self.assertIn("软件测试",self.browser.title.encode("utf-8")) #断言,转码
time.sleep()
'''接下来的工作,是获取新页面的handler,以及循环点击搜索结果''' if __name__ == "__main__":
unittest.main()
明天有时间再优化,根据id进行随机数选取。可以参考我之前Ruby的一个自动化测试框架:http://www.cnblogs.com/zhuque/archive/2012/11/30/2796866.html
优化: 1、导入random模块,随机打开页面搜索结果;
2、获取新打开页面的页面句柄,并建立新结果页的断言
3、建立while循环,每次打开新页面前,重新获取原来结果页面的句柄
# coding:utf-
import time
from selenium import webdriver
import unittest
from pythontest.commlib.baselib import *
import random #引用封装后的日志系统
log = TestLog().getlog()
class BaiBu(unittest.TestCase):
u'''【百度.类】'''
def setUp(self):
self.browser = webdriver.Firefox()
self.browser.get("http://www.baidu.com")
self.browser.implicitly_wait()
#self.base = Screen(self.browser) def tearDown(self):
# self.browser.quit()
pass def test_search(self):
u'''接下来的工作,是获取新页面的handler,以及循环点击搜索结果'''
log.info("搜索前title:" + self.browser.title.encode("utf-8") ) #得到的title中文编码格式,非UTF-8格式,需要转码
#输入关键字,关键字任意
self.browser.find_element_by_class_name("s_ipt").send_keys(u"北京尚拓云测 软件测试外包公司")
self.browser.find_element_by_class_name("s_btn").submit() #此处class属性有三个值,中间使用空格隔开,取其中一值
i =
while i < : #打开两次搜索结果
randid = random.randint(,) #根据搜索结果页id属性,随机打开搜索结果
#点击搜索结果
self.browser.switch_to.window(self.browser.window_handles[]) #获取搜索结果页的页面句柄
print( ".//*[@id='%s']/h3/a"%(randid) ) #对print()进行格式化输出,%(randid)
self.browser.find_element_by_xpath( ".//*[@id='%s']/h3/a"%(randid) ).click() #根据xpath识别元素
time.sleep()
self.browser.switch_to.window(self.browser.window_handles[-]) #获取新打开结果页的页面句柄
log.info("结果页:" + self.browser.title.encode("utf-8") ) #转码utf-
self.assertIn("尚拓云测",self.browser.title.encode("utf-8")) #断言,转码
i = i +
time.sleep() if __name__ == "__main__":
unittest.main()
测试结果如下:
selenium-webdriver循环点击百度搜索结果以及获取新页面的handler的更多相关文章
- selenium 之百度搜索,结果列表翻页查询
selenium之百度搜索,结果列表翻页查询 by:授客 QQ:1033553122 实例:百度搜索,结果列表翻页查询 解决问题:解决selenium driver获取web页面元素时,元素过期问题 ...
- selenium,webdriver模仿浏览器访问百度 基础2
学python理念 : 代码要多敲 一定要多敲 哪怕很基础 注释要清晰 由于基础1有一些注释写的很详细, 在这里有些注释没有写的很详细 可以配合基础1一起学习哦 from selenium im ...
- python + selenium登陆并点击百度平台
from PIL import Imagefrom selenium.webdriver import DesiredCapabilitiesfrom selenium import webdrive ...
- selenium,webdriver模仿浏览器访问百度 基础1
这是一种比较好的反反爬技术 #安装:pip install selenium=2.48.0 #显示:pip show selenium #卸载:pip uninstall selenium #模拟用户 ...
- 转载 基于Selenium WebDriver的Web应用自动化测试
转载原地址: https://www.ibm.com/developerworks/cn/web/1306_chenlei_webdriver/ 对于 Web 应用,软件测试人员在日常的测试工作中, ...
- python--selenium简单模拟百度搜索点击器
python--selenium简单模拟百度搜索点击器 发布时间:2018-02-28 来源:网络 上传者:用户 关键字: selenium 模拟 简单 点击 搜索 百度 发表文章摘要:用途:简单模拟 ...
- C#+Selenium抓取百度搜索结果前100网址
需求 爬取百度搜索某个关键字对应的前一百个网址. 实现方式 VS2017 + Chrome .NET Framework + C# + Selenium(浏览器自动化测试框架) 环境准备 创建控制台应 ...
- (java)selenium webdriver学习--通过id、name定位,输入内容,搜索,关闭操作、通过tagname查找元素
selenium webdriver学习--通过id.name定位,输入内容,搜索,关闭操作:通过tagname查找元素 打开谷歌浏览器,输入不同的网站,搜索框的定位含有不同元素(有时为id,有时为n ...
- 使用python和selenium写一个百度搜索的case
今天练习的内容主要写了一个小功能,在百度上搜索某词汇,然后实现web上的back功能 代码如下: import unittest from selenium import webdriver from ...
随机推荐
- 分布式存储ceph——(5)ceph osd故障硬盘更换
正常状态:
- Asp.net mvc 动作方法中 调用 另一个控制器的动作方法
public ActionResult 动作方法(){ var otherController = DependencyResolver.Current.GetService<另一个控制器的类名 ...
- XXXX is not in the sudoers file. This incident will be reported解决方法
假设你用的是Red Hat系列(包括Fedora和CentOS)的Linux系统.当你执行sudo命令时可能会提示“某某用户 is not in the sudoers file. This inc ...
- nodejs 实现跨域
1.nodejs let http = require('http'); http.createServer((req,res) => { res.setHeader("Access- ...
- 4月18日 MySQL学习
正式开始了数据库的学习 昨天下好的MySQL 今天正式开始学习的,介绍了多种数据库软件,当然 学习的这个是开源的 免费的. DBMS(数据库管理系统)这就是我们学习的数据库的软件 数据库分为关系型数据 ...
- struts2 --xml配置
struts2.5 官方文档介绍 这个是struts2.5给出的web.xml配置方式,核心包已经被挪到了ng的上一层 <web-app id="MyStrutsApp" v ...
- Heap Partition ZOJ - 3963(贪心)
ZOJ - 3963 贪心做一下就好了 反正别用memset #include <iostream> #include <cstdio> #include <sstrea ...
- Python_003_Python循环控制
♥3.1 顺序结构 程序中语句执行的基本顺序按各语句出现位置的先后次序执行 ♥3.2 选择结构 主要理解一下if语句的使用即可,单分支 .双分支.多分支以及if语句的嵌套. ♥3.3 循环结构 ...
- Codeforces 1108E2 Array and Segments (Hard version)(差分+思维)
题目链接:Array and Segments (Hard version) 题意:给定一个长度为n的序列,m个区间,从m个区间内选择一些区间内的数都减一,使得整个序列的最大值减最小值最大. 题解:利 ...
- CF1157C1-Increasing Subsequence (easy version)题解
原题地址 题目大意: