selenium——一个用于web应用程序测试的工具

selenium是什么?他的前世今生是什么?他的作用是什么?他的原理是什么?啊哈哈???想知道,那还不赶紧去百度百科。

https://baike.baidu.com/item/selenium/18266

鉴于自觉地人少之又少,所以鄙人查询百般资料,总结一二。当然代码,纯手打!!!

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

功能:
1.框架底层使用JavaScipt模拟真实用户对浏览器进行操作。
测试脚本执行时,浏览器自动按照脚本代码做出点击,输入,打开,验证等操作,
就像真实用户所做的一样,从终端用户的角度测试应用程序。
2.使浏览器兼容性测试自动化成为可能,尽管在不同的浏览器上依然有细微的差别。
3.使用简单,可使用Java,python等多种语言编写用例脚本。

好处:Selenium 测试直接在浏览器中运行,就像真实用户所做的一样。
通过编写模仿用户操作的 Selenium 测试脚本,可以从终端用户的角度来测试应用程序。
通过在不同浏览器中运行测试,更容易发现浏览器的不兼容性。
Selenium 的核心,也称browser bot,是用 JavaScript 编写的。
这使得测试脚本可以在受支持的浏览器中运行。
browser bot 负责执行从测试脚本接收到的命令,测试脚本要么是用 HTML 的表布局编写的,
要么是使用一种受支持的编程语言编写的。

WebDriver是一个用来进行复杂重复的web自动化测试的工具。
在配置Selenium的WebDriver前首先先选定测试的浏览器,
IE、Chrome、Firefox等主流浏览器。
不同的浏览器需要不同的驱动来实现。
Firefox是自带驱动,不需要下载驱动,IE、Chrome等需要下载相应的驱动。

哈哈哈有点多。下面来简单看看代码是如何实现web自动化的测试。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.firefox.options import Options as FOptions
from selenium.webdriver.common.action_chains import ActionChains

import time
import lxml.html
import requests
from urllib3 import response

options = FOptions()
#options.add_argument('-headless') #无头模式(不会打开web浏览器的页面,为了更加直观的看到效果,还是打开的好)
browser = webdriver.Firefox(executable_path="D:\geckodriver.exe",firefox_options=options)


#模拟浏览器打开百度
'''
browser.get('http://www.baidu.com')
time.sleep(3)
browser.close()
'''


#基本使用查找元素
'''
#获取中国的详情页
browser.get('http://example.webscraping.com/places/default/view/China-47')
#获得中国的邻国   (找到中国的邻国,解析HTML文件,进行匹配)
print (browser.find_element_by_xpath('//tr[@id="places_neighbours__row"]/td[@class="w2p_fw"]').text)
# 自动获取HTML页面
print(browser.page_source)
#
browser.get("http://example.webscraping.com/dynamic")
#获取网页国家   注意:解析HTML,根据 id= results 获取
print (browser.find_element_by_css_selector('#results').text)
time.sleep(3)
browser.close()
'''

#元素交互
'''
#获取淘宝网站
browser.get('https://www.taobao.com')
#根据 id= 'q' 找到input输入框
input = browser.find_element_by_id("q")
#在输入框中输入iPhone
input.send_keys('iphone')
time.sleep(5)
input.clear()                  #清空输入框
input.send_keys('ipad')        #自动输入ipad
time.sleep(5)
input.clear()                  #清空输入框
input.send_keys(u'华为笔记本')  #输入华为笔记本
#自动点击 根据class=btn-search 名字添加一个按钮事件
button = browser.find_element_by_class_name("btn-search")
button.click()                  #点击事件
time.sleep(5)
browser.close()
'''


#鼠标模拟悬停并点击
'''
#用selenium做自动化,有时候会遇到需要模拟鼠标操作才能进行的情况,
# 比如单击、双击、点击鼠标右键、拖拽等等。
# 而selenium给我们提供了一个类来处理这类事件——ActionChains
#首先需要了解ActionChains的执行原理,当你调用ActionChains的方法时,
# 不会立即执行,而是会将所有的操作按顺序存放在一个队列里,
# 当你调用perform()方法时,队列中的时间会依次执行。

browser.maximize_window()       #把浏览器窗口最大化,防止隐藏需要操作的内容
browser.get('http://example.webscraping.com')   #获得网站
artical = browser.find_element_by_link_text('Log In') #根据链接元素文本找到Log In
#鼠标事件
ActionChains(browser).move_to_element(artical).perform()
#example.webscraping.com/places/default/user/register?_next=/places/default/index
#?_next=/places/default/index待跳转链接 (注册后会自动跳转到默认页面,通常是首页)
menu = browser.find_element_by_xpath('//a[@href="/places/default/user/register?_next=/places/default/index"]')
menu.click()
'''

#ajax
'''
browser.get('http://example.webscraping.com/places/default/search')
#在页面中找到搜索输入框
input = browser.find_element_by_id('search_term')
input.send_keys('C')   #在输框中输入c
time.sleep(3)
#找到搜索按钮
button = browser.find_element_by_id('search')
button.click()   #添加一个点击事件
time.sleep(3)
#获取页面中相关的国家信息
print browser.find_element_by_css_selector('#results').text

'''

#动作链进阶
'''
browser.get("http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable")
#找到表单 id=iframeResult 即两个待操作的图形所在的表单
browser.switch_to.frame('iframeResult')
source = browser.find_element_by_id('draggable')
target = browser.find_element_by_id('droppable')
actions = ActionChains(browser)

#动作链将一系列动作组织起来,形成一组测试,当调用perform的时候开始执行
actions.drag_and_drop(source,target)
actions.perform()
time.sleep(3)
t = browser.switch_to_alert()
print t.text
t.accept()
time.sleep(10)
browser.close()
'''

#执行JavaScript
'''
browser.get('http://www.taobao.com')
time.sleep(10)
#自动滑到页面的底部
browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
browser.execute_script('alert("kkk")')   #验证是否滑动  弹出文字
time.sleep(10)
browser.close()
'''




#休眠

#强制休眠 time.sleep(4)

#隐式休眠是全局的,如果找不到等待设置的秒数,再次找不到抛出异常
#使用是selenium自带的休眠方式
# browser.implicitly_wait(2)


#导入包用来检查页面元素是不是存在
from selenium.webdriver.common.by import By
#设置休眠
from selenium.webdriver.support.ui import WebDriverWait
#设置检查页面包含不包含该元素
from selenium.webdriver.support import expected_conditions as EC

#显式休眠
url = 'http://www.taobao.com'
browser.get(url)

wait = WebDriverWait(browser,10)


#查找页面元素    根据通过ID属性 当找到 q类型时停止休眠
input1 = wait.until(EC.presence_of_element_located((By.ID,'q')))

#根据css选择器,找到按钮btn-search会停止
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,".btn-search")))
#输出结果,表示成功
print (input1,button)

以上代码,注意注释部分,不要混乱。诸多不足,还望高人指点。

猜你喜欢

转载自blog.csdn.net/cai_cai_cai_1992/article/details/82888134