【Python 笔记】selenium 简介

Selenium 是ThoughtWorks专门为Web应用程序编写的一个验收测试工具。Selenium测试直接运行在浏览器中,可以模拟真实用户的行为。支持的浏览器包括IE(7、8、9)、Mozilla Firefox、Mozilla Suite等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好地工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。


简单地说,Selenium允许你用代码操作浏览器,也可以执行JS脚本,这使它的应用不仅仅限于自动化测试。比如用它切换马甲登录网站,这正是笔者接触selenium的初衷。

本文涉及的软件版本:Python 3.4,selenium 2.48.0,chromedriver 2.19


从源码中可以找到selenium 2.48.0支持的浏览器如下:

[python]  view plain  copy
  1. Firefox  
  2. Chrome  
  3. ChromeOptions  
  4. Ie  
  5. Edge  
  6. Opera  
  7. Safari  
  8. BlackBerry  
  9. PhantomJS  
  10. Android  
  11. Remote  
  12. DesiredCapabilities  
  13. ActionChains  
  14. TouchActions  


一、安装与配置


以笔者用的Chrome为例:

1.安装selenium

命令行运行:

[python]  view plain  copy
  1. pip install selenium  

2.安装ChromeDriver 2.19
官网: https://sites.google.com/a/chromium.org/chromedriver/

下载:http://chromedriver.storage.googleapis.com/index.html (可能无法打开,请自备梯子,笔者正在使用这一款:ShadowSocks

若使用其他浏览器测试须另行下载对应的Driver。

下载后放到Chrome安装目录下,并把该目录添加到path环境变量。

也可以直接把chromedriver放到Python的根目录。总之它要放在Path变量的文件夹中。


二、基本用法

[python]  view plain  copy
  1. from selenium import webdriver  
  2. from selenium.webdriver.common.action_chains import ActionChains #ActionChains鼠标操作类  
  3. from selenium.webdriver.common.keys import Keys #keys类操作  
  4.   
  5. # 打开浏览器:  
  6. browser = webdriver.Chrome()  
  7.   
  8. # # 若未配置环境变量:  
  9. # path = r'C:\Program Files\Google\Chrome\Application\chromedriver.exe'  
  10. # browser = webdriver.Chrome(executable_path = path)  
  11.   
  12. # 在指定时间范围等待:   
  13. browser.implicitly_wait(30)  
  14.   
  15. # 设置超时  
  16. browser.set_page_load_timeout(30)  
  17. browser.set_script_timeout(30)  
  18.   
  19. # 打开url:  
  20. browser.get(r"http://www.你的网站.com")  
  21.   
  22. # 前进/后退  
  23. browser.forward()  
  24. browser.back()  
  25.   
  26. # 刷新   
  27. browser.refresh()  
  28.   
  29. # 将浏览器最大化  
  30. browser.maximize_window()  
  31.   
  32. # 将设置浏览器为宽480,高800显示'  
  33. browser.set_window_size(480800)  
  34.   
  35. # 关闭浏览器  
  36. browser.quit()  
  37.   
  38. # 关闭标签  
  39. browser.close()  
  40.   
  41. ''''' 
  42. 获取浏览器窗口相关信息 
  43. browser.title # 当前页面标题 
  44. browser.name # 浏览器名 
  45. browser.current_url # 返回当前页面url 
  46. browser.window_handles # 返回当前浏览器的所有窗口 
  47. browser.current_window_handle # 返回当前浏览器的窗口句柄 
  48. '''  
  49.   
  50. # 跳转到其他标签页  
  51. window = browser.window_handles  
  52. browser.switch_to_window(window[1])  
  53.   
  54. # 选择窗口  
  55. browser.switch_to_window('window_name')  
  56.   
  57. # 截取当前显示的页面并保存  
  58. browser.get_screenshot_as_file(r'd:\backup\140591\桌面\首页图片\test.png')  
  59.   
  60.   
  61. # 定位元素  
  62. # 需要先分析源码  
  63. text_username = browser.find_element_by_name('username')  
  64. text_password = browser.find_element_by_name('password')  
  65. form_login = browser.find_element_by_name('formlogin')  
  66. # 也可以使用其他方法如xpath,注意转义符  
  67. text_username = browser.find_element_by_xpath('//input[@name = \'username\']')  
  68. ''''' 
  69. 所有相关方法: 
  70. find_element(by='id', value=None) 
  71. find_element_by_class_name(name) 
  72. find_element_by_css_selector(css_selector) 
  73. find_element_by_id(id) 
  74. find_element_by_link_text(link_text) 
  75. find_element_by_name(name) 
  76. find_element_by_partial_link_text(link_text) 
  77. find_element_by_tag_name(name) 
  78. find_element_by_xpath(xpath) 
  79. element后加s则返回一组对象 
  80. '''  
  81.   
  82.   
  83. #-----------------------WebElement相关-----------------------  
  84.   
  85. # 输入值  
  86. # send_keys也可以用于上传文件:send_keys('d:/abc.txt')  
  87. text_username.send_keys("你的用户名_错误")  
  88. text_password.send_keys("你的密码")  
  89.   
  90. # 清空输入框,换成正确的用户名  
  91. text_username.clear()  
  92. text_username.send_keys("你的用户名_正确")  
  93.   
  94. # 提交表单  
  95. form_login.submit()  
  96.   
  97. ''''' 
  98. 相关方法 
  99. clear()  # 清除元素的内容 
  100. send_keys()  # 在元素上模拟按键输入 
  101. click()  # 单击元素 
  102. submit()  # 提交表单 
  103. size()  # 返回元素的尺寸 
  104. text()  # 获取元素的文本 
  105. get_attribute(name)  # 获得属性值 
  106. is_displayed()  # 设置该元素是否用户可见 
  107. '''  
  108.   
  109.   
  110. #-------------------alert/confirm/prompt对话框处理-------------------  
  111.   
  112. ''''' 
  113. switch_to_alert()   # 用于获取网页上的警告信息。 
  114. text   # 返回 alert/confirm/prompt 中的文字信息。 
  115. accept()   # 点击确认按钮。 
  116. dismiss()   # 点击取消按钮,如果有的话。 
  117. send_keys()   # 输入值,这个alert\confirm没有对话框就不能用了,不然会报错。 
  118. '''  
  119.   
  120.   
  121. #-----------------------下拉框处理-----------------------  
  122. # 二次定位  
  123. # driver.find_element_by_xx('xx').find_element_by_xx('xx').click()  
  124.   
  125. #先定位到下拉框  
  126. m=driver.find_element_by_id("ShippingMethod")  
  127. #再点击下拉框下的选项  
  128. m.find_element_by_xpath("//option[@value='10.69']").click()  
  129.   
  130.   
  131.   
  132.   
  133. #-----------------------cookie处理-----------------------  
  134. ''''' 
  135. get_cookies()   # 获得所有cookie信息 
  136. get_cookie(name)   # 返回特定name 有cookie信息  
  137. add_cookie(cookie_dict)   # 添加cookie,必须有name 和value 值 
  138. delete_cookie(name)   # 删除特定(部分)的cookie信息 
  139. delete_all_cookies()   # 删除所有cookie信息 
  140. '''  
  141.   
  142.   
  143.   
  144.   
  145.   
  146. #-----------------------文件上传-----------------------  
  147. # 定位上传按钮,添加本地文件  
  148. # driver.find_element_by_xx('xx').send_keys('d:/abc.txt')  
  149. driver.find_element_by_name("file").send_keys('D:\\selenium_use_case\upload_file.txt')  
  150.   
  151.   
  152.   
  153. #-----------------------文件下载-----------------------  
  154. fp = webdriver.FirefoxProfile()  
  155. fp.set_preference("browser.download.folderList",2)  
  156. fp.set_preference("browser.download.manager.showWhenStarting",False)  
  157. fp.set_preference("browser.download.dir", os.getcwd())  
  158. fp.set_preference("browser.helperApps.neverAsk.saveToDisk""application/octet-stream")  
  159.   
  160. browser = webdriver.Firefox(firefox_profile=fp)  
  161. browser.get("http://pypi.python.org/pypi/selenium")  
  162. browser.find_element_by_partial_link_text("selenium-2").click()  
  163.   
  164.   
  165.   
  166.   
  167. #-----------------------Keys类键盘操作-----------------------  
  168. from selenium.webdriver.common.keys import Keys   
  169.   
  170. # element.send_keys(...),下同  
  171. ''''' 
  172. send_keys(Keys.BACK_SPACE) # 返回键 
  173. send_keys(Keys.BACK_SPACE) 删除键(BackSpace) 
  174. send_keys(Keys.SPACE)  空格键(Space) 
  175. send_keys(Keys.TAB)  制表键(Tab) 
  176. send_keys(Keys.ESCAPE)  回退键(Esc) 
  177. send_keys(Keys.ENTER) 回车键(Enter) 
  178. send_keys(Keys.CONTROL,'a') 全选(Ctrl+A) 
  179. send_keys(Keys.CONTROL,'c') 复制(Ctrl+C) 
  180. send_keys(Keys.CONTROL,'x') 剪切(Ctrl+X) 
  181. send_keys(Keys.CONTROL,'v') 粘贴(Ctrl+V) 
  182. '''  
  183.   
  184.   
  185.   
  186. # ----------------ActionChains类鼠标操作--------------------  
  187. from selenium.webdriver.common.action_chains import ActionChains   
  188.   
  189. # 右键单击  
  190. ActionChains(browser).context_click(text_username).perform()  
  191. # 双击  
  192. ActionChains(browser).double_click(text_username).perform()  
  193. #执行元素的移动操作  
  194. ActionChains(browser).drag_and_drop(text_username, text_password).perform()  
  195.   
  196.   
  197. ''''' 
  198. ActionChains 类鼠标操作的常用方法: 
  199. context_click()   # 右击 
  200. double_click()   # 双击 
  201. drag_and_drop()   # 拖动 
  202. move_to_element()   # 鼠标悬停在一个元素上 
  203. click_and_hold()   # 按下鼠标左键在一个元素上 
  204. '''  
  205.   
  206. # -----------执行JavaScript脚本 --------------  
  207. js="var q=document.getElementById(\"user_name\");q.style.border=\"1px solid red\";"  
  208. #调用js  
  209. browser.execute_script(js)  
  210.   
  211. # eg:  
  212. # 将页面滚动条拖到底部  
  213. js="var q=document.documentElement.scrollTop=10000"  
  214. browser.execute_script(js)  
  215.   
  216. # 隐藏文字信息  
  217. driver.execute_script('$("#tooltip").fadeOut();')  
  218.   
  219. # 隐藏按钮:  
  220. button = driver.find_element_by_class_name('btn')  
  221. driver.execute_script('$(arguments[0]).fadeOut()',button)  


三、Demo


1. 用Chrome打开百度搜索关键字:Python

先分析一下百度首页的源码,Chrome中按F12打开控制台,用控制台左上角的放大镜图标找出输入框和提交按钮对应的代码。我们可以用id属性来获取这两个控件,如下图:


我们可以根据name、class、id等获取该控件。

完整代码如下:

[python]  view plain  copy
  1. from selenium import webdriver  
  2. from selenium.common.exceptions import NoSuchElementException  
  3. import time  
  4.   
  5. # 打开浏览器:  
  6. browser = webdriver.Chrome()  
  7.   
  8. browser.set_page_load_timeout(30)  
  9. browser.set_script_timeout(30)  
  10.   
  11. # 在此时间范围内智能等待操作完成  
  12. browser.implicitly_wait(30)  
  13.   
  14. # 每次点击链接后等待的秒数,用于观察操作效果  
  15. wait_time = 5   
  16.   
  17.   
  18.   
  19. # 打开url:  
  20. browser.get(r"http://www.baidu.com")  
  21. time.sleep(wait_time)  
  22.   
  23. # 获取输入框和提交按钮  
  24. search_input = browser.find_element_by_id("kw")  
  25. search_submit = browser.find_element_by_id("su")  
  26.   
  27. # 输入Python  
  28. search_input.send_keys("Python")  
  29.   
  30. # 点击「百度一下」按钮  
  31. search_submit.click()  
  32. time.sleep(wait_time)  
  33.   
  34. # 获取百度百科的链接  
  35. target = browser.find_element_by_partial_link_text("Python_百度百科")  
  36. target.click()  
  37.   
  38. # 关闭  
  39. browser.quit()  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值