F12:

右键   选择复制  path

from selenium import webdriver

import time

driver = webdriver.Chrome()

driver.get("http://www.baidu.com")

print(driver.title)

driver.find_element_by_id("kw").send_keys("selenium")

driver.find_element_by_id("su").click()

time.sleep(3)

driver.close()

运行脚本的第一步是打开浏览器,使用webdriver.Chrome()打开谷歌浏览器,如果要指定其他浏览器,比如要使用Firefox或者IE浏览器,更换浏览器名称就可以了

driver = webdriver.Chrome() //打开Chrome浏览器

driver = webdriver.Firefox() //打开Firefox浏览器

driver = webdriver.Ie() //打开IE浏览器

第二步操作是打开页面,使用driver.get(url)方法来打开网页链接,例如脚本中打开百度首页

driver.get("http://www.baidu.com")

接下来是print(driver.title),使用driver.title获取当前页面的title,title就是在浏览器tab上显示的内容,例如百度首页的标题是“百度一下,你就知道”

浏览器前进后退

在当前页面打开一个新的链接后,如果想回退到前一个页面,使用如下driver.back(),相当于点击了浏览器的后退按钮

和back操作对应的是浏览器前进操作driver.forward(),相当于点击了浏览器的前进按钮

driver.back() //回到上一个页面

driver.forward() //切换到下一个页面

最大化浏览器窗口

浏览器运行后,如果页面没有最大化,可以调用driver.maximize_window()将浏览器最大化,相当于点击了页面右上角的最大化按钮

也可以自定义浏览器的尺寸

driver.maximize_window() //浏览器窗口最大化

driver.set_window_size(800, 720) //设置窗口大小为800*720

屏幕截图

打开页面以后,可以对页面进行截屏,在遇到异常的时候,根据截图可以快速定位问题的原因所在

浏览器截屏操作,参数是截屏的图片保存路径:

driver.get_screenshot_as_file("D:/data/test.png")

页面刷新

有时页面过期后,网页上显示的信息可能不是最新的,需要对页面进行刷新,使用refresh()方法刷新页面,相当于点击浏览器的刷新按钮

driver.refresh() //重新加载页面

退出浏览器

在测试脚本运行完后,一般会在最后关闭浏览器,有两种方法关闭浏览器,close()方法用于关闭当前页面,quit()方法关闭所有和当前测试有关的浏览器窗口

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

driver.quit()//关闭所有由当前测试脚本打开的页面

一份简单的测试 demo

关于 360 haosou.com 的测试 :

1 #coding=utf-8

2 from selenium import webdriver

3 import os

4 import time

5 # set little time stop and big time stop for viewing changes

6 little_time_stop = 1

7 big_time_stop = 2

8 # 默认广告条数

9 ads_num_require = 8

10 # 请求连接

11 req_url = "http://www.haosou.com/s?ie=utf-8&shb=1&src=360sou_newhome&q=%E9%B2%9C%E8%8A%B1"

12 # 打开浏览器

13

14 browser = webdriver.Chrome()

15 # 开始请求

16 17 browser.get(req_url)

18 # 获取所有的广告

19

20 all_ads_li = browser.find_elements_by_css_selector('#e_idea_pp li')

21 # 当前广告条数

22 ads_num_current = len(all_ads_li)

23 print "Has been got %d ads" %(ads_num_current)

24 # 如果广告条数与默认不符

25 if ads_num_current < ads_num_require:

26 print "The number of ads is not enough ( current : %d require: %d)" %(ads_num_current,ads_num_require)

27 # exit()

28 # 获取顶部连接

29 i = 0

30 for ads_li in all_ads_li:

31 time.sleep(big_time_stop)

32 i = i+1

33 print "ads %d :" %i

34 try:

35 main = ads_li.find_element_by_css_selector('h3 a')

36 except:

37 print "\tError: ads %d cann't find" %(i)

38 else:

39 print "\tReady: visit ads %d" %(i)

40 main.click()

41 print "\tSucess: visit ads %d" %(i)

42 time.sleep(little_time_stop)

43 try:

44 img_link = ads_li.find_element_by_class_name('e_biyi_img')

45 except:

46 print "\tError : no img in ads %d " %(i)

47 else:

48 print "\tReady : visit img_link %d" %(i)

49 img_link.click()

50 print "\tSuccess : visit img_link %d" %(i)

51 time.sleep(little_time_stop)

52 try:

53 child_div = ads_li.find_element_by_class_name('e_biyi_childLink');

54 except:

55 print "\tError : no child link in ads %d" %(i)

56 else:

57 try:

58 child_links = child_div.find_elements_by_css_selector('a')

59 except:

60 print "\tError : find child_links error"

61 else:

62 num_links = len(child_links)

63 print "\tSuccess : there are %d child_links" %(num_links)

64 j = 0

65 for child_a in child_links:

66 j = j + 1

67 print "\t\tReady : visit child link %d in ads %d" %(j, i)

68 child_a.click()

69 print "\t\tSuccess : visit child link %d in ads %d" %(j, i)

70 time.sleep(little_time_stop)

71 print "End and thanks for your using!"

72 # 下面代码选择取消注释

73 # 延时

74 # time.sleep(5)

75 # 关闭当前窗口

76 # browser.close()

77 # 关闭所有已经打开的窗口

78 # browser.quit()

定位操作

以下是所有定位操作的 API :

返回一个匹配元素, 即一个 WebElement 元素

find_element_by_id()

find_element_by_name()

find_element_by_class_name()

find_element_by_tag_name()

find_element_by_link_text()

find_element_by_partial_link_text()

find_element_by_xpath()

find_element_by_css_selector()

返回一个列表, 包含所有匹配的元素, 即一个 WebElement 列表

find_elements_by_id()

find_elements_by_name()

find_elements_by_class_name()

find_elements_by_tag_name()

find_elements_by_link_text()

find_elements_by_partial_link_text()

find_elements_by_xpath()

find_elements_by_css_selector()

使用的时候需注意下面几点 :

python selenium 提供了两种对象 : WebDriver 和 WebElement

这两种对象都可以使用这些 API

这些 API 一旦执行失败(即查找不到), 就会抛出异常

因此必须使用 try: .. except: ... 机制避免错误的行为影响程序继续进行

WebDriver 调用以上 API 进行全局定位

WebElement 调用以上 API 可以进行层级定位, 即 查找当前元素的子元素

WebDriver 的使用

开始的时候必须要有初始化一个 WebDriver 实例, 即下面的 browser 用来对浏览器进行控制以及页面的访问

# 请求连接

req_url ="http://www.haosou.com/s?ie=utf-8&shb=1&src=360sou_newhome&q=%E9%B2%9C%E8%8A%B1"

# 打开浏览器

browser =webdriver.Chrome()

# 开始请求

browser.get(req_url)

接着, 就可以使用异常 API 进行当前页面的全局查找, 比如 :

# 获取所有的广告

all_ads_li =browser.find_elements_by_css_selector('#e_idea_pp li')

WebElement 的使用

使用 browser.find_element_by_xx() 得到的是一个 WebElement 实例

使用获得的实例调用上面的 API 即可进行层级查找

使用 browser.find_elements_by_xx() 得到的是一个元素是 WebElement 实例的 list

通过对 list 的遍历, 即可对各个实例进行相应的操作

WebDriver 的一些常用操作

browser.curren_url : 获取当前加载页面的 URL

browser.close() : 关闭当前窗口, 如果当前窗口是最后一个窗口, 浏览器将关闭

browser.quit() : 关闭所有窗口并停止 ChromeDriver 的执行

browser.add_cookie(cookie_dict) : 为当前会话添加 cookie

browser.get_cookie(name) : 得到执行 cookie

browser.get_cookies() : 得到所有的 cookie

driver.add_cookie({‘name’ : ‘foo’, ‘value’ : ‘bar’}) driver.add_cookie({‘name’ : ‘foo’, ‘value’ : ‘bar’, ‘path’ : ‘/’}) driver.add_cookie({‘name’ : ‘foo’, ‘value’ : ‘bar’, ‘path’ : ‘/’, ‘secure’:True})

browser.delete_all_cookies() : 删除当前会话的所有cookie

browser.delete_cookie(name) : 删除指定 cookie

browser.back() : 相当于浏览器的后退历史记录

browser.forward() : 相当于浏览器的前进历史记录

browser.execute_script(script, *args) : 同步执行 js 脚本

browser.execute_async_script(script, *args) : 异步执行 js 脚本

browser.get(url) : 在当前窗口加载 url

browser.refresh() : 刷新当前页面

browser.current_window_handle : 当前窗口的 handle, 相当于一个指针一样的东西, 用来指向当前窗口

browser.window_handles : 当前浏览器中的已经打开的所有窗口, 是一个 list

browser.switch_to_window(window_handle) : 切换 window_handle 指向的窗口

browser.title : 当前页面的 title

browser.name : 当前浏览器的名字

WebElement 的一些常用操作

webEle.clear() : 清楚元素的内容, 假如这个元素是一个文本元素

webEle.click() : 点击当前元素

webEle,is_displayed() : 当前元素是否可见

webEle.is_enabled() : 当前元素是否禁止, 比如经常会禁用一些元素的点击

webEle.is_selected() : 当前元素是否选中, 文本输入框的内容

webEle.send_keys(*value) : 向当前元素模拟键盘事件

webEle.submit() : 提交表单

webEle.tag_name : 当前元素的标签名

webEle.text : 当前元素的内容

webEle.get_attribute(name) : 获取当前元素执行属性的值

python的selenium自动化测试公路_selenium+python自动化测试相关推荐

  1. python 自动化输入登录密码_selenium+python实现自动登录脚本

    os:windows 前提:Python,selenium,IEDriverServer.exe,ie浏览器 首先安装Python2.7 安装成功后,计算机联网状态下在cmd命令行下输入:pip in ...

  2. python启动不了浏览器_selenium+python自动化测试--解决无法启动IE浏览器及报错问题...

    前言:记录启动IE浏览器的报错及解决方法. 错误1: selenium.common.exceptions.WebDriverException: Message: 'IEDriverServer.e ...

  3. python selenium下载对话框_Selenium+Python:下载文件(Firefox 和 Chrome)

    引自  https://blog.csdn.net/Momorrine/article/details/79794146 1.      环境 操作系统 Win10 IDE Eclipse (Oxyg ...

  4. python selenium高级教程_selenium(python)教程

    Updated on Aug-11-2019 今天再试了一下,发现自己的chrome安装路径变成"C:\Users\Kevin\AppData\Local\Google\Chrome\App ...

  5. python和selenium的关系_selenium之python源码解读-webdriver继承关系

    一.webdriver继承关系 在selenium中,无论是常用的Firefox Driver 还是Chrome Driver和Ie Drive,他们都继承至selenium\webdriver\re ...

  6. python导入selenium快捷键_python,_Selenium工具自动打开的浏览器和用快捷方式打开的样式不一样?,python - phpStudy...

    Selenium工具自动打开的浏览器和用快捷方式打开的样式不一样? 每次用selenium打开的Firefox都跟我桌面的快捷方式不一样呢 谷歌 等===都不一样 就火狐吧我桌面安装的是32位如图 驱 ...

  7. python用selenium 验证码图片_selenium实现定位截图----获取验证码图片

    获取验证码的步骤: 浏览器最大化,截取整个网页,并保存 定位验证码(通过id或class元素实现定位) 获取验证码的x,y坐标轴,以及长宽,形成我们需要获取的位置坐标 打开之前保存的网页截图,从中截取 ...

  8. selenium python 文本框输入信息_selenium python向富文本框中输入内容

    基于本人不会JavaScript,不能像大神一样写出很牛X的方法,只能使用者屌丝方法了,不过很容易理解. 我使用的是ueditor富文本框 1.我的富文本框是在一个iframe中,进入iframe的方 ...

  9. python下载文件暂停恢复_selenium+Python如何取消Chrome下载文件的‘保留’‘放弃’提示?...

    本人在做自动化测试的时候遇到问题,自动导出文件的步骤可以执行,但是文件并没有成功导出到目标目录,经debug发现,Chrome卡在了下载询问的窗口页面,就是底部弹出窗口询问是否'保留'或者'放弃'的那 ...

最新文章

  1. xml布局显示需要预判断,可是还没有show出来,怎么办?
  2. Java并发常用方法 sleep 和 wait
  3. grandle下载安装图解
  4. skiplist及Java实现
  5. java 拼音_JAVA实现汉字转换为拼音 pinyin4j/JPinyin
  6. C语言重难点知识梳理与常见题目/项目游戏解析
  7. 如何接收谷歌账号的注册短信
  8. 一套完整实用的IT规划方法论
  9. 《白说》---- 读书笔记
  10. Flink sql 写ddl连接kafka
  11. java如何自定义注解
  12. 【pytorch】|tensor grad
  13. css百分比定位和百分比尺寸
  14. 今天两位80后程序员身价超千亿 一大波快手员工财富自由
  15. 2019年奥斯卡获奖电影绿皮书经典台词(中英文对照)
  16. 网狐荣耀需要什么服务器系统,网狐荣耀环境搭建教程
  17. Android 各种自定义进度条Progressbar
  18. 异常状态及发生率计算
  19. 测试如何与开发人员进行沟通
  20. 智能小车红外循迹原理

热门文章

  1. Python基础——学习手册
  2. 为什么做生意可以让双方生活的更好?
  3. RV1126 适配 Debian10(搭建人脸识别云服务器)
  4. 07--SpringBoot之数据库JPA(CRUD)
  5. TML5画布桌面和移动事件支持教程
  6. 【计算机网络】二、应用层
  7. python编程课程-吐血整理!程序员最爱的13个免费Python课程
  8. Python批量将文件按序号重命名
  9. python使用协程_Python 协程使用心得
  10. java中级面试题及答案,spring常见面试题总结超详细回答