51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1494|回复: 1
打印 上一主题 下一主题

selenium用法详解

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-4-2 15:54:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一
样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的
主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统
之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、
Perl等不同语言的测试脚本。
selenium用于爬虫,主要是用来解决javascript渲染的问题
selenium的安装详见博客:http://blog.csdn.net/qq_29186489/article/details/78581249
基本框架
控制chrome浏览器,访问百度,并搜索关键词Python,获取搜索结果
  1. # -*- coding: utf-8 -*-
  2. from selenium import webdriver
  3. from selenium.webdriver.common.by import By
  4. from selenium.webdriver.common.keys import Keys
  5. from selenium.webdriver.support import expected_conditions as EC
  6. from selenium.webdriver.support.wait import WebDriverWait
  7. import time
  8. browser=webdriver.Chrome()
  9. try:
  10.     browser.get("https://www.baidu.com")
  11.     input=browser.find_element_by_id("kw")
  12.     input.send_keys("Python")
  13.     input.send_keys(Keys.ENTER)
  14.     wait=WebDriverWait(browser,10)
  15.     wait.until(EC.presence_of_element_located((By.ID,"content_left")))
  16.     print(browser.current_url)
  17.     print(browser.get_cookies())
  18.     print(browser.page_source)
  19.     time.sleep(10)
  20. finally:
  21.     browser.close()

  22. 运行结果如下:
  23. 这里写图片描述
  24. 这里写图片描述
  25. 详细用法如下:
  26. 1:声明浏览器对象

  27. # -*- coding: utf-8 -*-
  28. from selenium import webdriver
  29. #声明谷歌、Firefox、Safari等浏览器
  30. browser=webdriver.Chrome()
  31. browser=webdriver.Firefox()
  32. browser=webdriver.Safari()
  33. browser=webdriver.Edge()
  34. browser=webdriver.PhantomJS()

  35. 2:访问页面

  36. #_*_coding: utf-8_*_

  37. from selenium import webdriver
  38. browser=webdriver.Chrome()
  39. browser.get("http://www.taobao.com")
  40. print(browser.page_source)
  41. browser.close()

  42. 3:查找单个元素

  43. #_*_coding: utf-8_*_

  44. from selenium import webdriver
  45. from selenium.webdriver.common.by import By
  46. browser=webdriver.Chrome()
  47. browser.get("http://www.taobao.com")
  48. input_first=browser.find_element_by_id("q")
  49. input_second=browser.find_element_by_css_selector("#q")
  50. input_third=browser.find_element(By.ID,"q")
  51. print(input_first,input_second,input_first)
  52. browser.close()

  53. 4:查找多个元素

  54. #_*_coding: utf-8_*_

  55. from selenium import webdriver
  56. from selenium.webdriver.common.by import By
  57. browser=webdriver.Chrome()
  58. browser.get("http://www.taobao.com")
  59. lis=browser.find_element_by_css_selector("li")
  60. lis_c=browser.find_element(By.CSS_SELECTOR,"li")
  61. print(lis,lis_c)
  62. browser.close()

  63. 5:元素的交互操作
  64. 对获取到的元素调用交互方法

  65. #_*_coding: utf-8_*_
  66. from selenium import webdriver
  67. import time
  68. browser=webdriver.Chrome()
  69. browser.get("https://www.taobao.com")
  70. input=browser.find_element_by_id("q")
  71. input.send_keys("iPhone")
  72. time.sleep(10)
  73. input.clear()
  74. input.send_keys("iPad")
  75. button=browser.find_element_by_class_name("btn-search")
  76. button.click()
  77. time.sleep(10)
  78. browser.close()

  79. 6:交互动作
  80. 把动作附加到交互链中

  81. #_*_coding: utf-8_*_
  82. from selenium import webdriver
  83. from selenium.webdriver import ActionChains
  84. import time
  85. from selenium.webdriver.common.alert import Alert
  86. browser=webdriver.Chrome()
  87. url="http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"
  88. browser.get(url)
  89. #切换到目标元素所在的frame
  90. browser.switch_to.frame("iframeResult")
  91. #确定拖拽目标的起点
  92. source=browser.find_element_by_id("draggable")
  93. #确定拖拽目标的终点
  94. target=browser.find_element_by_id("droppable")
  95. #形成动作链
  96. actions=ActionChains(browser)
  97. actions.drag_and_drop(source,target)
  98. #执行
  99. actions.perform()
  100. '''
  101. 1.先用switch_to_alert()方法切换到alert弹出框上
  102. 2.可以用text方法获取弹出的文本 信息
  103. 3.accept()点击确认按钮
  104. 4.dismiss()相当于点右上角x,取消弹出框
  105. '''
  106. t=browser.switch_to_alert()
  107. print(t.text)
  108. t.accept()
  109. time.sleep(10)
  110. browser.close()
  111. 7:执行javascript
  112. 下面的例子是执行就是,拖拽进度条到底,并弹出提示框

  113. #_*_coding: utf-8_*_
  114. from selenium import webdriver
  115. browser=webdriver.Chrome()
  116. browser.get("https://www.zhihu.com/explore")
  117. browser.execute_script("window.scrollTo(0,document.body.scrollHeight)")
  118. browser.execute_script("alert('To Button')")
  119. browser.close()

  120. 8:获取元素信息
  121. 获取属性

  122. # -*- coding: utf-8 -*-
  123. from selenium import webdriver

  124. browser=webdriver.Chrome()
  125. url="https://www.zhihu.com/explore"
  126. browser.get(url)
  127. logo=browser.find_element_by_id("zh-top-link-logo")
  128. print(logo)
  129. print(logo.get_attribute("class"))
  130. browser.close()

  131. 获取文本值

  132. # -*- coding: utf-8 -*-
  133. from selenium import webdriver

  134. browser=webdriver.Chrome()
  135. url="https://www.zhihu.com/explore"
  136. browser.get(url)
  137. logo=browser.find_element_by_id("zh-top-link-logo")
  138. print(logo)
  139. print(logo.text)
  140. browser.close()

  141. 获取ID、位置、大小和标签名

  142. # -*- coding: utf-8 -*-
  143. from selenium import webdriver

  144. browser=webdriver.Chrome()
  145. url="https://www.zhihu.com/explore"
  146. browser.get(url)
  147. logo=browser.find_element_by_id("zh-top-link-logo")
  148. print(logo)
  149. #id
  150. print(logo.id)
  151. #位置
  152. print(logo.location)
  153. #标签名
  154. print(logo.tag_name)
  155. #大小
  156. print(logo.size)
  157. browser.close()

  158. 9:等待
  159. 隐式等待
  160. 当使用了隐式等待执行测试的时候,如果webdriver没有在DOM中找到元素,将继续等待,超过设定的时间后则抛出找不到元素的异常,换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找DOM,默认时间为0.

  161. # -*- coding: utf-8 -*-
  162. from selenium import webdriver

  163. browser=webdriver.Chrome()
  164. url="https://www.zhihu.com/explore"
  165. browser.get(url)
  166. browser.implicitly_wait(10)
  167. logo=browser.find_element_by_id("zh-top-link-logo")
  168. print(logo)
  169. browser.close()

  170. 显示等待

  171. # -*- coding: utf-8 -*-
  172. from selenium import webdriver
  173. from selenium.webdriver.common.by import By
  174. from selenium.webdriver.support.ui import WebDriverWait
  175. from selenium.webdriver.support import expected_conditions as EC

  176. browser=webdriver.Chrome()
  177. url="https://www.taobao.com"
  178. browser.get(url)
  179. wait=WebDriverWait(browser,10)
  180. input=wait.until(EC.presence_of_element_located((By.ID,"q")))
  181. button=wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,".btn-search")))
  182. print(input,button)
  183. browser.close()

  184. 10:浏览器的前进和后退

  185. # -*- coding: utf-8 -*-
  186. from selenium import webdriver
  187. import time

  188. browser=webdriver.Chrome()
  189. browser.get("https://www.taobao.com")
  190. browser.get("https://www.baidu.com")
  191. browser.get("https://www.python.org")
  192. browser.back()
  193. time.sleep(1)
  194. browser.forward()
  195. browser.close()

  196. 11:cookies的处理

  197. # -*- coding: utf-8 -*-
  198. from selenium import webdriver
  199. import time

  200. browser=webdriver.Chrome()
  201. browser.get("https://www.zhihu.com/explore")
  202. print(browser.get_cookies())
  203. browser.add_cookie({"name":"name","domain":"www.zhihu.com","value":"germey"})
  204. print(browser.get_cookies())
  205. browser.delete_all_cookies()
  206. print(browser.get_cookies())
  207. browser.close()

  208. 12:选项卡管理

  209. # -*- coding: utf-8 -*-
  210. from selenium import webdriver
  211. import time

  212. browser=webdriver.Chrome()
  213. browser.get("https://www.zhihu.com/explore")
  214. browser.execute_script("window.open()")
  215. print(browser.window_handles)
  216. browser.switch_to_window(browser.window_handles[1])
  217. browser.get("https://www.taobao.com")
  218. time.sleep(1)
  219. browser.switch_to_window(browser.window_handles[0])
  220. browser.get("https://python.org")
  221. browser.close()

  222. 13:异常处理

  223. # -*- coding: utf-8 -*-
  224. from selenium import webdriver
  225. from selenium.common.exceptions import TimeoutException,NoSuchElementException

  226. browser=webdriver.Chrome()
  227. try:
  228.     browser.get("https://www.zhihu.com/explore")
  229. except TimeoutException:
  230.     print("Time out")
  231. try:
  232.     browser.find_element_by_id("hello")
  233. except NoSuchElementException:
  234.     print("No Element")
  235. finally:
  236.     browser.close()
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-17 23:56 , Processed in 0.063723 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表