來源 :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