Selenium的介绍、配置和调用
Selenium(浏览器自动化测试框架) 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。
框架底层使用JavaScript模拟真实用户对浏览器进行操作。测试脚本执行时,浏览器自动按照脚本代码做出点击,输入,打开,验证等操作,就像真实用户所做的一样,从终端用户的角度测试应用程序。使浏览器兼容性测试自动化成为可能,尽管在不同的浏览器上依然有细微的差别。使用简单,可使用Java,Python等多种语言编写用例脚本。Selenium的配置
1、安装 Selenium模块: pip install Selenium
2、下载浏览器驱动,Selenium3.x调用浏览器必须有一个webdriver驱动文件,下载前查看自己的谷歌浏览器版本,在下在界面选择距离自己电脑谷歌版本最近的版本号进行下载
Chrome驱动文件下载:点击下载chromedrive
下载之后,解压将.exe文件放在python解释器根目录下的Scripts文件夹里里面。
Selenium的调用
from selenium import webdriver import time # 创建Chrome对象;webdriver.Chrome(path):path:是下载驱动文件路径默认是Scripts文件夹下 browser = webdriver.Chrome() # 驱动浏览器发起请求 browser.get('https://www.taobao.com') # 输出浏览器当前界面的源码信息 print(browser.page_source) time.sleep(10) # 关闭单个浏览器 browser.close()Selenium的使用
定位:
Selenium提供了8种定位方式
定位方式含义idid元素定义namename元素定位class nameclass元素定位tag name标签名定位link text完整文本链接定位partial link text部分文本超链接定位xpathxpath表达式定位css selectorcss选择器定位定位元素的使用
定位一个元素定位多个元素 含义find_element_by_id find_elements_by_id通过元素id定位find_element_by_name find_elements_by_name通过元素name定位find_element_by_class_namefind_elements_by_class_name通过classname进行定位find_element_by_tag_namefind_elements_by_tag_name通过标签定位find_element_by_link_textfind_elements_by_link_tex通过完整超链接定位find_element_by_partial_link_textfind_elements_by_partial_link_text通过部分链接定位find_elements_by_css_selectorfind_elements_by_css_selector通过css选择器进行定位find_element_by_xpathfind_elements_by_xpath通过xpath表达式定位3.实例演示
通过id定位:
dr.find_element_by_id("kw")通过name定位:
dr.find_element_by_name("wd")通过class name定位:
dr.find_element_by_class_name("s_ipt")通过tag name定位:
dr.find_element_by_tag_name("input")通过xpath定位,xpath定位有N种写法,这里列几个常用写法:
dr.find_element_by_xpath("//*[@id='kw']") dr.find_element_by_xpath("//*[@name='wd']") dr.find_element_by_xpath("//input[@class='s_ipt']") dr.find_element_by_xpath("/html/body/form/span/input") dr.find_element_by_xpath("//span[@class='soutu-btn']/input") dr.find_element_by_xpath("//form[@id='form']/span/input") dr.find_element_by_xpath("//input[@id='kw' and @name='wd']")通过css定位,css定位有N种写法,这里列几个常用写法:
dr.find_element_by_css_selector("#kw") dr.find_element_by_css_selector("[name=wd]") dr.find_element_by_css_selector(".s_ipt") dr.find_element_by_css_selector("html > body > form > span > input") dr.find_element_by_css_selector("span.soutu-btn> input#kw") dr.find_element_by_css_selector("form#form > span > input")接下来,我们的页面上有一组文本链接。
新闻 hao123通过link text定位:
dr.find_element_by_link_text("新闻") dr.find_element_by_link_text("hao123")通过partial link text定位:
dr.find_element_by_partial_link_text("新") dr.find_element_by_partial_link_text("hao") dr.find_element_by_partial_link_text("123")Selenium库下webdriver模块常用方法的使用(交互)
1.控制浏览器操作的一些方法
方法 说明set_window_size()设置浏览器的大小back()控制浏览器后退forward() 控制浏览器前进refresh()刷新当前页面clear()清除文本send_keys (value)模拟按键输入click()单击元素submit()用于提交表单get_attribute(name)获取元素属性值is_displayed()设置该元素是否用户可见size返回元素的尺寸text 获取元素的文本实例演示:
from selenium import webdriver from time import sleep #1.创建Chrome浏览器对象,这会在电脑上在打开一个浏览器窗口browser = webdriver.Chrome() #2.通过浏览器向服务器发送URL请求browser.get("https://www.baidu.com/") sleep(3) #3.刷新浏览器browser.refresh() #4.设置浏览器的大小browser.set_window_size(1400,800) #5.设置链接内容element=browser.find_element_by_link_text("新闻") element.click() element=browser.find_element_by_link_text("“下团组”时间") element.click()2.鼠标事件
在 WebDriver 中, 将这些关于鼠标操作的方法封装在 ActionChains 类提供。
from selenium.webdriver import ActionChains 方法 说明ActionChains(driver) 构造ActionChains对象context_click()执行鼠标悬停操作move_to_element(above) 右击double_click() 双击drag_and_drop() 拖动move_to_element(above) 执行鼠标悬停操作context_click() 用于模拟鼠标右键操作, 在调用时需要指定元素定位perform() 执行所有 ActionChains 中存储的行为,可以理解成是对整个操作的提交动作实例演示:
from selenium import webdriver #1.引入 ActionChains 类from selenium.webdriver import ActionChains #1.创建Chrome浏览器对象,这会在电脑上在打开一个浏览器窗口driver = webdriver.Chrome() driver.get("https://www.baidu.com") #2.定位到要悬停的元素element= driver.find_element_by_link_text("设置") #3.对定位到的元素执行鼠标悬停操作ActionChains(driver).move_to_element(element).perform() #找到链接elem1=driver.find_element_by_link_text("搜索设置") elem1.click() #通过元素选择器找到id=sh_2,并点击设置elem2=driver.find_element_by_id("sh_1") elem2.click() #保存设置elem3=driver.find_element_by_class_name("prefpanelgo") elem3.click()3.键盘事件
Selenium中的Key模块为我们提供了模拟键盘按键的方法,那就是send_keys()方法。它不仅可以模拟键盘输入,也可以模拟键盘的操作。
常用的键盘操作如下:
模拟键盘按键 说明send_keys(Keys.BACK_SPACE) 删除键(BackSpace)send_keys(Keys.SPACE) 空格键(Space)send_keys(Keys.TAB) 制表键(Tab)send_keys(Keys.ESCAPE) 回退键(Esc)send_keys(Keys.ENTER) 回车键(Enter)组合键的使用
模拟键盘按键 说明send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A)send_keys(Keys.CONTROL,‘c’) 复制(Ctrl+C)send_keys(Keys.CONTROL,‘x’) 剪切(Ctrl+X)send_keys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V)send_keys(Keys.F1…Fn) 键盘 F1…Fn获取结点信息:
切换Frame:
选项卡管理
Cookies:
延时等待:https://selenium-python-zh.readthedocs.io/en/latest/waits.html
显示等待:
显示等待,就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,那么久跳出Exception(简而言之,就是直到元素出现才去操作,如果超时则报异常)
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC browser = webdriver.Chrome() browser.get('https://www.taobao.com') wait = WebDriverWait(browser, 10) # 在等待时长内,寻找id属性为 qinput = 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(input) print(button)隐式等待:
隐式等待,就是在创建driver时,为浏览器对象创建一个等待时间,这个方法是得不到某个元素就等待一段时间,直到拿到某个元素位置。
browser = webdriver.Chrome() browser.implicitly_wait(10) browser.get('https://www.taobao.com') input = browser.find_element_by_id('q') print(input)注意:在使用隐式等待的时候,实际上浏览器会在你自己设定的时间内部断的刷新页面去寻找我们需要的元素
无界面浏览:
关闭浏览器
在前面的例子中我们一直使用quit()方法,其含义为退出相关的驱动程序和关闭所有窗口。除此之外,WebDriver还提供了close()方法,用来关闭当前窗口。例多窗口的处理,在用例执行的过程中打开了多个窗口,我们想要关闭其中的某个窗口,这时就要用到close()方法进行关闭了。
方法说明close()关闭单个窗口quit()关闭所有窗口原文链接:https://blog.csdn.net/qq_36119192/article/details/82958734