Selenium 是一个浏览器自动化测试框架,它主要用于web应用程序的自动化测试,其主要特点如下:开源、免费;多平台、浏览器、多语言支持;对web页面有良好的支持;API简单灵活易于使用;支持分布式测试用例执行。 Selenium经历了两个版本,Selenium1.0和2.0,Selenium1.0主要由以下几部分构成:
明白了Selenium1.0的家族关系,Selenium2.0可以简单的认为是将WebDriver加入到了Selenium RC这一部分中去。那么Selenium RC和WebDriver有什么区别呢? RC和 WebDriver 类似,都可以看做是一套操作web页面的规范。当然,他们的工作原理不一样。
安装python
python的安装此处就不细说,去python官网,下载对应的python版本安装,注意环境变量的配置。
安装Selenium
使用pip 命令安装 selenium pip install selenium
, Mac电脑 安装过python3 使用pip3 install selenium
来安装。
安装浏览器驱动 使用chrome浏览器,需要下载对应版本的chromedriver
安装上述工具后,可以测试下环境是否正常,使用以下这段代码
# -*- coding:utf-8 -*-
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://baidu.com")
driver.close()
复制代码复制代码
浏览器能正常打开百度,那么环境安装是正常的
通过id属性来定位元素(id属性在html文档中必须具有唯一性)
find_element_by_id()方法
通过name属性来定位元素(name属性在当前页面中)
find_element_by_name()方法
通过class属性来定位元素
find_element_by_class_name()方法
通过tag来定位元素
find_element_by_tag_name()方法
通过link元素标签对之间的文本信息来定位元素
find_element_by_link_text()方法
通过partial link定位元素,和link类似,只不过是部分文本信息来进行定位
find_element_by_partial_link_text()方法
find_element_by_xpath()方法
绝对路径来定位:find_element_by_xpath('/html/body/.........')
文本框:find_element_by_xpath("/html/body/div[2]/div[1]/div/div[1]/div/form/span[1]/input")
通过CSS定位元素
文本框:find_element_by_css_selector("#kw")
按钮:find_element_by_css_selector("#su")
文本框:find_element_by_css_selector(".s_ipt")
按钮:find_element_by_css_selector(".bg s_btn")
文本框:
find_element_by_css_selector("[name = 'wd']")
find_element_by_css_selector("[maxlength = 255]")
find_element_by_css_selector("[autocomplete = 'off']")
控制浏览器
控制浏览器窗口大小:
driver=webdriver.Firefox()
#设置窗口大小为x,y
driver.set_window_size(x,y)
#最大化窗口
driver.maxmize_window()
元素操作
当我们获取了元素之后,还要对其进行操作,如点击按钮、输入文字、提交表单等。大多数页面交互的方法通过WebElement接口提供,常用的有:
driver.find_element_by_css_selector("#kw").send_keys("selenium2").submit()
还有几个常用的方法:
模拟鼠标右键、双击、悬停、拖拽等操作,会用到ActionChains类。selenium.webdriver.common.action_chains.ActionChains(driver)当调用ActionChains的方法时,不会立即执行,而是会将所有的操作按顺序存放在一个队列里,当你调用perform()方法时,队列中的时间会依次执行。
ActionChains方法列表:
click(on_element=None) ——单击鼠标左键
click_and_hold(on_element=None) ——点击鼠标左键,不松开
context_click(on_element=None) ——点击鼠标右键
double_click(on_element=None) ——双击鼠标左键
drag_and_drop(source, target) ——拖拽到某个元素然后松开
drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开
key_down(value, element=None) ——按下某个键盘上的键
key_up(value, element=None) ——松开某个键
move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标
move_to_element(to_element) ——鼠标移动到某个元素
move_to_element_with_offset(to_element, xoffset, yoffset) ——移到距某个元素(左上角)多少距离的位置
perform() ——执行链中的所有动作
release(on_element=None) ——在某个元素位置松开鼠标左键
send_keys(*keys_to_send) ——发送某个键到当前焦点的元素
send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素
复制代码复制代码
显示等待: - 主要使用的类和方法:WebDriverWait、uitil\until_not、Expected Conditions。
隐式等待: - implicitly_wait
感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取