由官方文档看selenium(1)
来源:互联网 发布:库里2015赛季数据 编辑:程序博客网 时间:2024/05/21 16:32
1.基本用法:
先从官方文档的第一个例子来看
eg.
from selenium import webdriverfrom selenium.webdriver.common.keys import Keysdriver = webdriver.Firefox()driver.get("http://www.python.org")assert "Python" in driver.titleelem = driver.find_element_by_name("q")elem.clear()elem.send_keys("pycon")elem.send_keys(Keys.RETURN)assert "No results found." not in driver.page_sourcedriver.close()
先是从selenium导入webdriver,然后用webdriver打开安装好的Firefox,这里有时候会出现一些Exception,详情可以查看本博的另一篇文章。
然后就是打开所需的网址,使用driver.get()方法。例子中还使用了find_element_by_*()系列的方法,是用来查找网页中所需要的元素的,这里是查找页面中name="p"的元素,获取到这个元素之后先清空一下输入框原有的内容,然后使用send_keys()方法将"pycon"输入到查找框中然后进行查找。
这是使用selenium进行web页面自动化测试的最简单的用法。
2.使用selenium来进行单元测试:
selenium通常被用来进行测试。然而selenium包并没有提供一个测试的工具或是框架。但是你可以使用unittest模块来进行测试:
看官方文档下面的例子:
import unittestfrom selenium import webdriverfrom selenium.webdriver.common.keys import Keysclass 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()
首先进行单元测试的第一步是导入unittest的模块,unittest模块是基于Java的JUnit单元测试模块的。unittest模块为python的单元测试提供了一个测试的框架。这段代码做的工作和上面的其实大体一致,只是使用模块测试的方法。
这段测试是封装在PythonOrgSearch的类内的,并且该类是继承于unittest.TestCase,以便于告诉unittest模块这个类是测试类:
setUp方法是初始化的方法,类似于C++的构造方法,这个方法会在测试内容的方法执行之前执行。
test_search_in_python_org()方法是测试内容的方法,也是进行测试的主题内容。通常这个方法以test开头。
tearDown()方法在测试内容方法(test类方法)执行完毕之后执行。类似于C++的析构函数。这里是调用了driver的close()函数来关闭浏览器的一个tab,当然如果仅有一个tab就会关闭整个浏览器。或者是调用quit()方法,当你有多个tab的时候也是直接关闭整个浏览器。
3.获取页面元素的方法:
通常我们使用selenium是希望它可以假装成一个真的用户来和浏览器进行交互,这就需要用到一些HTML的元素。因此通常第一步我们需要获取到所需的HTML元素:
例如一个如下的标签:
<input type="text" name="passwd" id="passwd-id" />
我们可以通过find_element_by_*()系列的方法获取到这个标签:
例如:
element = driver.find_element_by_id("passwd-id")element = driver.find_element_by_name("passwd")element = driver.find_element_by_xpath("//input[@id='passwd-id']")
还有一些常用的find_element_by_*()系列的方法driver.find_element_by_class_name(name) 使用CSS类name的元素driver.find_elements_by_class_name(name)driver.find_element_by_css_selector(selector) 匹配CSS selector的元素driver.find_elements_by_css_selector(selector)driver.find_element_by_id(id) 匹配id属性值的元素driver.find_elements_by_id(id)driver.find_element_by_link_text(text) 完全匹配提供的text的<a>元素driver.find_elements_by_link_text(text)driver.find_element_by_partial_link_text(text) 包含提供的text的元素driver.find_elements_by_partial_link_text(text)driver.find_element_by_tag_name(name) 匹配标签name的元素(不区分大小写<a>匹配'a'和'A')driver.find_elements_by_tag_name(name)find_element_*()方法返回一个WebElement对象,包含页面中匹配查询道德第一个元素。
find_elements_*()方法返回一个WebElement对象列表,包含页面中所有匹配的元素。
除了最后两个方法之外,其他的方法参数都是区分大小写的。如果页面上没有要查找的元素,selenium就会跑出NoSuchElement异常
4.WebElement的属性和方法:
属性或方法描述
tag_name
标签名,例如'a'代表<a>元素
get_attribute(name)
该元素name属性的值
text
该元素内的文本,例如<span>hello</span>中的hello
clear()
清除其中输入的文本
is_displayed()
如果该元素可见返回True
is_enabled()
对于输入元素,如果该元素启用,返回True
is_selected()
对于复选框或单选框元素,如果被选中返回True
location
一个字典,包含键'x'和'y',表示该元素在页面上的位置
5.处理下拉列表:
element = driver.find_element_by_xpath("//select[@name='name']")all_options = element.find_elements_by_tag_name("option")for option in all_options: print("Value is: %s" % option.get_attribute("value")) option.click()
这段代码定位到select元素并循环点击获取每个选项的value但是这并不是处理select元素的最佳方式,WebDriver中包含一个selenium.webdriver.support.ui.Select的类:
from selenium.webdriver.support.ui import Selectselect = Select(driver.find_element_by_name('name'))select.select_by_index(index)select.select_by_visible_text("text")select.select_by_value(value)
WebDriver还提供有取消所有已经选择的选项的方法、select = Select(driver.find_element_by_id('id'))select.deselect_all()
这样会在第一个SELECT元素中取消所有已经选择的选项如果在一次测试中,我们需要一个所有默认选项的列表,Select类也提供了一个方法给我们:
select = Select(driver.find_element_by_xpath("xpath"))all_selected_options = select.all_selected_options
还可以获取到所有可以选择的选项:options = select.options
- 由官方文档看selenium(1)
- 由官方文档看selenium(2)
- Selenium官方文档:Selenium RC 安装步骤
- 离线看Android官方文档
- Selenium_官方文档:Selenium RC 安装步骤
- NSRunLoop(1)官方文档
- NSURLSession官方文档(1)
- Gradle Android插件 官方文档 (1)
- Spring官方文档学习(1)
- Pixi官方文档译文(1)
- Unity官方文档【1】
- Reactjs官方文档(1)
- spring3.1官方文档
- selenium文档
- 看各种官方文档中发现的小tips
- 看Google官方的Android开发文档的一些收获
- Ruby官方文档翻译(Ruby官方文档中文版)
- 【Android官方文档】翻译Android官方文档-AIDL(三)
- 2016年最值得学习的五大开源项目
- 正在载入...
- MFC自绘TAB控件
- android 调用相机获取图片
- Android 位置服务与GPS实时定位
- 由官方文档看selenium(1)
- 【动态规划】 方格取数
- 最全面的AndroidStudio配置指南总结-包括护眼模式
- [python3.5][PyUserInput]模拟鼠标和键盘模拟
- DFS遍历邻接表
- 第二十二讲项目3—分支嵌套流程图【三级成绩】
- C语言期中考|Code for ' ', a-z and A-Z
- tar
- HUD5918 KMP