哪些不为人知的selenium-知识点,卧槽,牛批

117 篇文章 1 订阅
14 篇文章 0 订阅

WebDriver

自动化测试代码:自动化测试代码发送请求给浏览器的驱动(比如火狐驱动、谷歌驱动)
浏览器的驱动:它来解析这些自动化测试的代码,解析后把它们发送给浏览器
浏览器:执行浏览器驱动发来的指令,并最终完成工程师想要的操作。

po模型设计思想

Page Object模式是一种自动化测试设计模式,将页面定位和业务操作分开,分离测试对象(元素对象)和测试脚本(用例脚本),提高用例的可维护性。

selenium框架编写自动化思路

import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

class PythonOrgSearch(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()

    def test_search_in_python_org(self):
        driver = self.driver
        driver.get("http://www.python.org")
        self.assertIn("Python", driver.title)
        elem = driver.find_element_by_name("q")
        elem.send_keys("pycon")
        elem.send_keys(Keys.RETURN)
        assert "No results found." not in driver.page_source

    def tearDown(self):
        self.driver.close()

if __name__ == "__main__":
    unittest.main()

项目目录

1、将环境配置信息、测试用例数据及定位元素都放在单独的配置文件中
2、将公用工具放在utils文件夹下

下载浏览器驱动

1、selenium3对不同的浏览器进行了规范,没有提供默认的浏览器。想使用selenium驱动不同的浏览器,必须单独下载并设置不同的浏览器驱动。
Firefox浏览器驱动:geckodriver
Chrome浏览器驱动:chromedriver , taobao备用地址
IE浏览器驱动:IEDriverServer
Edge浏览器驱动:MicrosoftWebDriver
Opera浏览器驱动:operadriver
PhantomJS浏览器驱动:phantomjs

设置浏览器驱动

方法一:将浏览器驱动配置在系统环境变量中,然后验证不同的浏览器驱动是否正常使用。

from selenium import webdriver
driver = webdriver.Firefox()

方法二:指定驱动器位置

webdriver.Firefox(executable_path="E:\\work_tool\\java\selenium\\geckodriver-v0.20.0-win64\\geckodriver")

加载chrome浏览器默认配置

1、chrome配置文件路径:在Chrome浏览器的地址栏输入:chrome://version/,查看个人资料路径并复制路径。
配置文件路径:/Users/macbookpro/Library/Application Support/Google/Chrome (不要Default,不然还是打开一个新用户)
2、加载默认配置

rom selenium import webdriver
from time import sleep
#个人资料路径
user_data_dir=r'C:\Users\xxxx\AppData\Local\Google\Chrome\User Data'
#加载配置数据
option=webdriver.ChromeOptions()
option.add_argument(user_data_dir)
#启动浏览器配置
driver=webdriver.Chrome(chrome_options=option)
driver.get('https://www.cnblogs.com/xiaobeibi/')
sleep(2)
driver.quit()

浏览器操作

driver.get(“http://www.google.com”):打开浏览器。selenium会等待静态元素加载完毕(其实是等到 onload 方法执行完毕)
driver.maxmize_window:浏览器窗口最大化
driver.set_window_size(hight, wath) :设置浏览器高、宽
driver.get_window_size() :获取当前窗口的长和宽
driver.set_window_position() :设置浏览器位置
driver.get_window_position() :获取浏览器位置
driver.back() :浏览器回退
driver.forward(): 浏览器前进
driver.refresh(): 浏览器刷新
driver.close() :关闭浏览器
driver.quit():关闭浏览器且关闭驱动
driver.name:获取浏览器名称
driver.title :获取窗口标题
driver.page_source:获取浏览器页面信息
driver.current_url :获取当前URL
driver.get_screenshot_as_file() //截图并保存为文件
driver.get_screenshot_as_base64 截图并保存为存64位二进制流格式,可嵌套邮件等
driver.get_screenshot_as_png 截图并保存为二进制流格式
driver.current_window_handle //获取当前页面的句柄
driver.window_handles //获取当前所有的句柄
driver.switch_to_active_element() //返回的是当前焦点的对象,即返回WebElement对象。
driver.switch_to_window(win_handle) //切换窗口
driver.switch_to_frame(id 或者name) //切换到新表单,网页里嵌套网页,通过src指定远程跳转地址
driver.switch_to_default_content() // 切回默认主frame
driver.switch_to_alert() //跳转到警告窗口 警告框是windows系统自带的窗口。。页面上同时有且只有一个警告框出现
driver.accept() //确认
driver.dismiss() //取消
driver.text:获取文本值
driver.send_keys() :输入值
driver.session_id /获取session
driver.get_cookies() //获取当前会话所有的cookie
driver.get_cookie(‘’) //返回cookie
driver.add_cookie(‘’) //添加cookie,添加cookies后需要刷新页面cookis才能生效
driver.delete_cookie(‘’) //删除cookie
driver.delete_all_cookies()//删除浏览器cookies
driver.implicitly_wait():设置智能隐式等待时间
driver.execute_script(js)
1.移除input只读属性 js = document.getElementById(\”text\”).readOnly = false
2.页面下滑到底部 js = window.scrollTo(0,3000)
3.显示 js=document.getElementById(\”img_good\”).style.display = \”block\”
driver.find_element(by=By.ID, value = None) //找元素,没有找到元素向上拋异常
driver.find_elements(by=By.ID, value = None) //找一组元素,没有找到元素,返回[]

element = driver.find_element_by_id() //通过ID找元素
element = driver.find_elements_by_id() //通过ID找一组元素
element = driver.find_element_by_xpath() //通过xpath找元素
element = driver.find_elements_by_xpath //通过xpath找一组元素
element = driver.find_element_by_class_name() //通过class找元素
element = driver.find_elements_by_class_name() //通过class找一组元素
element = driver.find_element_by_name() //通过name找元素
element = driver.find_elements_by_name() //通过name找一组元素
element = driver.find_element_by_tag_name() //通过tag找元素
element = driver.find_element_by_tag_name() //通过tag找一组元素
element = driver.find_element_by_link_text() //通过link_text找元素
element = driver.find_elements_by_link_text() //通过link_text找一组元素
element = driver.find_element_by_partial_link_text()
element = driver.find_elements_by_partial_link_text()
element = driver.find_element_by_css_selector() //通过css找元素
element = driver.find_elements_by_css_selector() //通过css找一组元素

下拉框选项

from selenium.webdriver.support.select import Select
Select(driver.find_element_by_id('s1Id’)).select_by_index(index) //通过索引定位
Select(driver.find_element_by_id('s1Id’)).select_by_value(value) //通过value值定位
Select(driver.find_element_by_id('s1Id’)).select_by_visible_text(text) //通过文本值定位

反选:
1 deselect_all # 取消全部的已选择项
2 deselect_by_index # 取消已选中的索引项
3 deselect_by_value # 取消已选中的value值
4 deselect_by_visible_text # 取消已选中的文本值

选项:
options //获取所有下拉列表的选项
all_selected_options //获取所有被选中的选项
first_selected_option //获取第一个被选中的选项

元素属性及方法

element.send_keys() //模拟输入
element.clear() //清除元素内容
element.click() //点击元素
element.submit //提交表单
element.get_attribute(name) //获取属性值
element.is_displayed() //设置元素是否可见
element. is_selected() //元素是否选中
element.size //获取元素的高宽
element.text //获取文本值
element.tag_name //获取tag标签名
element.parent //获取父元素
element. value_of_css_property(‘’) //获取CSS的属性值
element. is_enabled()//判断元素是否可用

智能等待

1、显式等待使Webdriver等待某个条件成立时继续执行,否则在达到最大时长时抛出超时异常(TimeoutException)。

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
WebDriverWait(driver, 20, 1).until(EC.presence_of_all_elements_located(By.ID,'kw'))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

WebDriverWait类是由WebDirver提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。具体格式如下:
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored__exceptions=None)
driver :浏览器驱动。
timeout :最长超时时间,默认以秒为单位.
poll__frequency:检测的间隔(步长)时间,默认为0.58。
ignored_exceptions :超时后的异常信息,默认情况下抛NoSuchElementException异常。
WebDriverWait()一般由until()或until_not()方法配合使用,下面是until()和until_not()方法的说明。
until(method,message=‘’)
调用该方法提供的驱动程序作为一个参数,直到返回值为True。
until_not(method, message=‘’)
调用该方法提供的驱动程序作为一个参数,直到返回值为False。
通过as关键字将expected_conditions重命名为EC,并调用presence_of_element_located()方法判断元素是否存在。
2、隐式等待是通过一定的时长等待页面上某元素加载完成。如果超出了设置的时长元素 还没有被加载,则抛出 NoSuchElementException 异常。WebDriver 提供了 implicitly_wait() 方法来实现隐式等待,默认设置为0。

driver.implicitly_wait()
elem = driver.find_element_by_name("q")
implicitly_wait()默认参数的单位为秒,等待时间并非一个固定的时间,它并不影响脚本的执行速度。它并不针对页面上的某一元素进行等待。当脚本执行到某个元素定位时,如果元素可以定位,则继续执行;如果元素定位不到,则它将以轮询的方式不断地判断元素是否被定位到。假设在第6秒定位到了元素则继续执行,若直到超出设置时长还没有定位到元素,则抛出异常。

鼠标事件

from selenium.webdriver.common.action_chains import ActionChains
driver = selenium.webdriver.Chrome()
action = Action_Chains(driver)
action.click() //在当前鼠标焦点处点一下
action.click(element) //点击元素,同element.click()效果相同
action.send_keys(‘键盘Keys.TAB’) //发送某个键到当前焦点的元素
action.send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素
action.drag_and_drop_by_offset() //拖拽到坐标点上
action.drag_and_drop(source, off) //从一个地方拖拽到另一个地方
action.release(on_element) //抬起鼠标,松开焦点
action.move_to_element() //鼠标移动到某个元素
action.move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标
action.double_click(on_element) //双击
action.click_and_hold(on_element) //按住不抬起
action.context_click(on_element) //鼠标右键
action.perform() //演示所有action效果,否则没有效果

键盘事件

from selenium.webdriver.common.keys import Keys
key_down(value, element=None) ——按下某个键盘上的键
key_up(value, element=None) ——松开某个键
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) 键盘F1
……
send_keys(keys.F12) 键盘F12

By模块

By.ID
By.NAME
By.CLASS_NAME
By.TAG_NAME
By.LINK_TEXT
By.PARTIAL_LINK_TEXT
By.XPATH
By.CSS_SELECTOR

XPATH

<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>
<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>

<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>
</bookstore>

1、/bookstore 获取根元素 bookstore。
2、//book 获取所有 book 子元素
3、//title/@lang 获取所有书的语言
4、//BOOK[1]/price 获取第一本书的价格
5、//book[last()]/price 获取最后一本书的价格
6、//book[@cover]/price 获取包含cover属性的价格
7、//book[price>10 and price<30] /title 获取定价在【10,30】之间的标题
8、//book[count(autor)>1]/title/text() 获取作者多余1的书的标题
9、//book[not(@category=‘web’) and price<40]/author
10、//book[contains(title,’X’)]/price 获取标题名称包含X的定价
11、//book[starts-with(title, ‘X’)]/price 标题以X开头的价格
12、* 所有
13、[] 谓语,表示查询条件
14、 + - * /

上传文件

方法1:
【选择文件】是input标签的元素,且type=‘file’,可以尝试先定位到该元素,然后执行send_keys方法传入文件路径
方法2:
借助AutoIt工具
操作windows桌面软件、窗口等
可将编写的脚本存为.exe文件

下载文件

Chrome下载
download.default_directory:设置下载路径
profile.default_content_settings.popups:设置为0禁止弹出窗口

from selenium import webdriver
import time
 
options = webdriver.ChromeOptions()
prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': 'd:\\'}
options.add_experimental_option('prefs', prefs)
 
driver = webdriver.Chrome(executable_path='F:\chromedriver\chromedriver.exe', chrome_options=options)
driver.get("http://pypi.Python.org/pypi/selenium")
driver.find_element_by_xpath("//a[@id='files-tab']").click()
time.sleep(5)
 
#选择下载文件
driver.find_element_by_xpath("//a[contains(@href,'.tar.gz')]").click()
time.sleep(30)
driver.quit()

最后

俺叫小枫,一个成天想着一夜暴富的测试员

(1140267353)一起成长一起加油的伙伴群!软件测试,与你同行!
群内可领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!

点赞关注不迷路!!!【三连ღ】,有问题也可私聊哟~(*╹▽╹*)

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值