Selenium基本教程


來源 :https://blog.csdn.net/qhd1994/article/details/79852449    

 

 

1.基本用法:

先從官方文檔的第一個例子來看

eg.

 

[python]  view plain  copy
 
  1. from selenium import webdriver  
  2. from selenium.webdriver.common.keys import Keys  
  3.   
  4. driver = webdriver.Firefox()  
  5. driver.get("http://www.python.org")  
  6. assert "Python" in driver.title  
  7. elem = driver.find_element_by_name("q")  
  8. elem.clear()  
  9. elem.send_keys("pycon")  
  10. elem.send_keys(Keys.RETURN)  
  11. assert "No results found." not in driver.page_source  
  12. driver.close()  


先是從selenium導入webdriver,然后用webdriver打開安裝好的Firefox,這里有時候會出現一些Exception,詳情可以查看本博的另一篇文章。

 

然后就是打開所需的網址,使用driver.get()方法。例子中還使用了find_element_by_*()系列的方法,是用來查找網頁中所需要的元素的,這里是查找頁面中name="p"的元素,獲取到這個元素之后先清空一下輸入框原有的內容,然后使用send_keys()方法將"pycon"輸入到查找框中然后進行查找。

這是使用selenium進行web頁面自動化測試的最簡單的用法。

 

2.使用selenium來進行單元測試:

selenium通常被用來進行測試。然而selenium包並沒有提供一個測試的工具或是框架。但是你可以使用unittest模塊來進行測試:

看官方文檔下面的例子:

 

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")

  1. driver.find_elements_by_class_name(name)  
  2.   
  3. driver.find_element_by_css_selector(selector)    匹配CSS selector的元素  
  4. driver.find_elements_by_css_selector(selector)  
  5.   
  6. driver.find_element_by_id(id)       匹配id屬性值的元素  
  7. driver.find_elements_by_id(id)  
  8.   
  9. driver.find_element_by_link_text(text)      完全匹配提供的text的<a>元素  
  10. driver.find_elements_by_link_text(text)  
  11.   
  12. driver.find_element_by_partial_link_text(text)    包含提供的text的元素  
  13. driver.find_elements_by_partial_link_text(text)  
  14.   
  15. driver.find_element_by_tag_name(name)       匹配標簽name的元素(不區分大小寫<a>匹配'a'和'A')  
  16. driver.find_elements_by_tag_name(name)

 

  1. 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 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 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM