来源 :https://blog.csdn.net/qhd1994/article/details/79852449 qhd1994css
1.基本用法:python
先从官方文档的第一个例子来看web
eg.浏览器
先是从selenium导入webdriver,而后用webdriver打开安装好的Firefox,这里有时候会出现一些Exception,详情能够查看本博的另外一篇文章。框架
而后就是打开所需的网址,使用driver.get()方法。例子中还使用了find_element_by_*()系列的方法,是用来查找网页中所须要的元素的,这里是查找页面中name="p"的元素,获取到这个元素以后先清空一下输入框原有的内容,而后使用send_keys()方法将"pycon"输入到查找框中而后进行查找。函数
这是使用selenium进行web页面自动化测试的最简单的用法。工具
2.使用selenium来进行单元测试:单元测试
selenium一般被用来进行测试。然而selenium包并无提供一个测试的工具或是框架。可是你可使用unittest模块来进行测试:测试
看官方文档下面的例子:ui
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()
首先进行单元测试的第一步是导入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" />
<div class="cheese"><span>Cheddar</span></div><divclass="cheese"><span>Gouda</span></div>
<ahref="http://www.google.com/search?q=cheese">cheese</a>>
咱们能够经过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']")
cheeses = driver.find_elements_by_class_name("cheese")
cheese =driver.find_element_by_link_text("cheese")
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 Select select = 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
--------------------- 本文来自 qhd1994 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/qhd1994/article/details/79852449?utm_source=copy