selenium用法详解

来源:火龙果软件工程

selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。

selenium用于爬虫,主要是用来解决javascript渲染的问题

基本框架

控制chrome浏览器,访问百度,并搜索关键词Python,获取搜索结果

# -*- coding: utf-8 -*-from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support importexpected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWaitimport timebrowser=webdriver.Chrome()try:browser.get("https://www.baidu.com")input=browser.find_element_by_id("kw")input.send_keys("Python")input.send_keys(Keys.ENTER)wait=WebDriverWait(browser,10)wait.until(EC.presence_of_element_located((By.ID,"content_left")))print(browser.current_url)print(browser.get_cookies())print(browser.page_source)time.sleep(10)finally:browser.close()

运行结果如下:

详细用法如下:

1:声明浏览器对象

# -*- coding: utf-8 -*-from selenium import webdriver#声明谷歌、Firefox、Safari等浏览器browser=webdriver.Chrome()browser=webdriver.Firefox()browser=webdriver.Safari()browser=webdriver.Edge()browser=webdriver.PhantomJS()

2:访问页面

#_*_coding: utf-8_*_from selenium import webdriverbrowser=webdriver.Chrome()browser.get("http://www.taobao.com")print(browser.page_source)browser.close()

3:查找单个元素

#_*_coding: utf-8_*_from selenium import webdriverfrom selenium.webdriver.common.by import Bybrowser=webdriver.Chrome()browser.get("http://www.taobao.com")input_first=browser.find_element_by_id("q")input_second=browser.find_element_by_css_selector("#q")input_third=browser.find_element(By.ID,"q")print(input_first,input_second,input_first)browser.close()

4:查找多个元素

#_*_coding: utf-8_*_from selenium import webdriverfrom selenium.webdriver.common.by import Bybrowser=webdriver.Chrome()browser.get("http://www.taobao.com")lis=browser.find_element_by_css_selector("li")lis_c=browser.find_element(By.CSS_SELECTOR,"li")print(lis,lis_c)browser.close()

5:元素的交互操作

对获取到的元素调用交互方法

#_*_coding: utf-8_*_from selenium import webdriverimport timebrowser=webdriver.Chrome()browser.get("https://www.taobao.com")input=browser.find_element_by_id("q")input.send_keys("iPhone")time.sleep(10)input.clear()input.send_keys("iPad")button=browser.find_element_by_class_name("btn-search")button.click()time.sleep(10)browser.close()

6:交互动作

把动作附加到交互链中

#_*_coding: utf-8_*_from selenium import webdriverfrom selenium.webdriver import ActionChainsimport timefrom selenium.webdriver.common.alert import Alertbrowser=webdriver.Chrome()url="http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"browser.get(url)#切换到目标元素所在的framebrowser.switch_to.frame("iframeResult")#确定拖拽目标的起点source=browser.find_element_by_id("draggable")#确定拖拽目标的终点target=browser.find_element_by_id("droppable")#形成动作链actions=ActionChains(browser)actions.drag_and_drop(source,target)#执行actions.perform()'''1.先用switch_to_alert()方法切换到alert弹出框上2.可以用text方法获取弹出的文本 信息3.accept()点击确认按钮4.dismiss()相当于点右上角x,取消弹出框'''t=browser.switch_to_alert()print(t.text)t.accept()time.sleep(10)browser.close()

7:执行javascript

下面的例子是执行就是,拖拽进度条到底,并弹出提示框

#_*_coding: utf-8_*_from selenium import webdriverbrowser=webdriver.Chrome()browser.get("https://www.zhihu.com/explore")browser.execute_script("window.scrollTo(0,document.body.scrollHeight)")browser.execute_script("alert('To Button')")browser.close()

8:获取元素信息

获取属性

# -*- coding: utf-8 -*-from selenium import webdriverbrowser=webdriver.Chrome()url="https://www.zhihu.com/explore"browser.get(url)logo=browser.find_element_by_id("zh-top-link-logo")print(logo)print(logo.get_attribute("class"))browser.close()

获取文本值

# -*- coding: utf-8 -*-from selenium import webdriverbrowser=webdriver.Chrome()url="https://www.zhihu.com/explore"browser.get(url)logo=browser.find_element_by_id("zh-top-link-logo")print(logo)print(logo.text)browser.close()

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

# -*- coding: utf-8 -*-from selenium import webdriverbrowser=webdriver.Chrome()url="https://www.zhihu.com/explore"browser.get(url)logo=browser.find_element_by_id("zh-top-link-logo")print(logo)#idprint(logo.id)#位置print(logo.location)#标签名print(logo.tag_name)#大小print(logo.size)browser.close()

9:等待

隐式等待

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

# -*- coding: utf-8 -*-from selenium import webdriverbrowser=webdriver.Chrome()url="https://www.zhihu.com/explore"browser.get(url)browser.implicitly_wait(10)logo=browser.find_element_by_id("zh-top-link-logo")print(logo)browser.close()

显示等待

# -*- coding: utf-8 -*-from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECbrowser=webdriver.Chrome()url="https://www.taobao.com"browser.get(url)wait=WebDriverWait(browser,10)input=wait.until(EC.presence_of_element_located((By.ID,"q")))button=wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,".btn-search")))print(input,button)browser.close()

10:浏览器的前进和后退

# -*- coding: utf-8 -*-from selenium import webdriverimport timebrowser=webdriver.Chrome()browser.get("https://www.taobao.com")browser.get("https://www.baidu.com")browser.get("https://www.python.org")browser.back()time.sleep(1)browser.forward()browser.close()

11:cookies的处理

# -*- coding: utf-8 -*-from selenium import webdriverimport timebrowser=webdriver.Chrome()browser.get("https://www.zhihu.com/explore")print(browser.get_cookies())browser.add_cookie({"name":"name","domain":"www.zhihu.com","value":"germey"})print(browser.get_cookies())browser.delete_all_cookies()print(browser.get_cookies())browser.close()

12:选项卡管理

# -*- coding: utf-8 -*-from selenium import webdriverimport timebrowser=webdriver.Chrome()browser.get("https://www.zhihu.com/explore")browser.execute_script("window.open()")print(browser.window_handles)browser.switch_to_window(browser.window_handles[1])browser.get("https://www.taobao.com")time.sleep(1)browser.switch_to_window(browser.window_handles[0])browser.get("https://python.org")browser.close()

13:异常处理

# -*- coding: utf-8 -*-from selenium import webdriverfrom selenium.common.exceptions import TimeoutException,NoSuchElementExceptionbrowser=webdriver.Chrome()try:browser.get("https://www.zhihu.com/explore")except TimeoutException:print("Time out")try:browser.find_element_by_id("hello")except NoSuchElementException:print("No Element")finally:browser.close()

本文分享自微信公众号 - 软件测试培训(iTestTrain),作者:软件测试培训

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-08-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Selenium实战-同步网易云音乐歌单到qq音乐

      本文主要介绍selenium在爬虫脚本的实际应用。适合刚接触python,没使用过selenium的童鞋。(如果你是老司机路过的话,帮忙点个star吧)

    小老鼠
  • 软件性能测试(连载6)

    08:26am up 7 min, 2 users, load average: 0.17, 0.16, 0.12

    小老鼠
  • 质量管理项目中的测试环境类型

    顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscr...

    小老鼠
  • 2018年python3与selenium教程第4节前进和后退操作cookie操作选项卡异常处理

    章鱼喵
  • Selenium库的使用

    selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)...

    萌海无涯
  • 一文搞懂浏览器自动化测试框架selenium!

    1、selenium是什么? Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览...

    石晓文
  • python+selenium+chromedriver调用chrome打开网页

    通过selenium库,python可以调用chrome打开指定网页并获取网页内容或者模拟登陆获取网页内容,如何实现呢?随ytkah一起来看看

    ytkah
  • 2018年python3与selenium教程第2节动作链实现拖曳效果执行Javascript获取节点信息

    Selenium Api并没有提供所有操作的api, 但支持模拟运行Javascript, 所以我们可以自己写js代码实现

    章鱼喵
  • python_selenium智联搜索

    去招聘会工作,奈何网上仅仅提供招聘会的公司名字,没有提供招聘的职位,SO我写了个小代码给别人在智联上面搜索职位,由于时间紧迫,前程的就不写了

    机器学习和大数据挖掘
  • python爬虫从入门到放弃(八)之 Selenium库的使用

    一、什么是Selenium selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium R...

    coders

扫码关注云+社区

领取腾讯云代金券