python selenium中文文檔-導航

python selenium中文文檔-導航

3. 導航

要用WebDriver做的第一件事就是導航到一個鏈接網址。 執行此操作的常規方法是調用get方法:

driver.get("http://www.google.com")

WebDriver將等待頁面完全加載(即onload事件已觸發)後,控制權返回腳本。 值得注意的是,如果你加載的頁面使用了大量AJAX,那麼WebDriver可能不知道它何時加載完全。 如果你需要確保這些頁面已完全加載,那麼你可以使用waits方法。

3.1. 與頁面交互

能夠導航到網頁並不是非常有用。 我們真正想做的是與頁面進行交互,或者更具體地說,是與頁面中的HTML元素進行交互。 首先,我們需要找到一個元素。 WebDriver提供了許多查找元素的方法。 例如,定義一個元素:

你可以使用以下任何一個方法找到它:

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

你也可以通過文本查找鏈接,但要小心! 文字必須完全匹配! 在WebDriver中使用XPATH時也應該小心。 如果有多個元素與查詢匹配,則只返回第一個元素。 如果找不到任何內容,將引發NoSuchElementException異常。

WebDriver有一個基於對象API; 我們使用element接口表示所有類型的元素。 這意味著雖然你可能會看到許多可能的方法,當你點擊IDE的自動完成組合鍵時,可以調用它們,但並非所有方法都有有效。 別擔心! WebDriver將嘗試做正確的事情,如果你調用一個沒有意義的方法(例如,是“meta”標籤上的“setSelected()”)將引發異常。

所以,你獲取到一個元素。 你能用它做什麼? 首先,你可能希望在文本字段中輸入一些文本:

element.send_keys("some text")

你可以使用“Keys”類模擬按箭頭鍵:

element.send_keys(" and some", Keys.ARROW_DOWN)

可以在任何元素上調用send_keys,如GMail上使用的鍵盤快捷鍵一樣,這樣可以測試鍵盤快捷鍵。 這樣做的副作用是在文本字段中鍵入內容不會自動清除它。 相反,你鍵入的內容將附加到已存在的內容中。 你可以使用clear方法輕鬆清除文本字段或textarea的內容:

element.clear()

3.2. 填寫表格

下拉列表SELECT的準備知識:

python selenium中文文檔-導航

整個是一個SELECT 下拉列表元素,其中每一項是option

我們已經看過如何在textarea或text字段中輸入文本,但其他元素呢? 你可以“切換”下拉列表的項 ,你可以使用“setSelected”來設置處理SELECT標籤,將OPTION tag 的設置為選擇狀態。

element = driver.find_element_by_xpath("//select[@name='name']")

all_options = element.find_elements_bytag_name("option")

for option in all_options:

print("Value is: %s" % option.get_attribute("value"))

option.click()

這將在頁面上找到第一個“SELECT”元素,並依次遍歷每個OPTION,打印出它們的值,然後依次選擇每個OPTION。

這不是處理SELECT元素的最有效方法。 WebDriver的支持類包括一個名為“Select”的類,它提供了與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中取消選中所有OPTION。

假設在測試中,我們需要所有默認選定option的列表,Select類提供了一個返回option的屬性方法:

select = Select(driver.find_element_by_xpath("//select[@name='name']"))

all_selected_options = select.all_selected_options

獲得所有可用options選項:

options = select.options

填寫完表單後,你可能想要提交表單。 一種方法是找到“提交”按鈕並單擊它,如下命令:

# Assume the button has the ID "submit" :

driver.find_element_by_id("submit").click()

或者,WebDriver在每個元素上都有“submit”的方法。WebDriver將遍歷DOM模型上的元素,直到找到封閉的表單中的元素,然後調用submit。 如果元素不在表單中,則會引發NoSuchuchElementException 異常

element.submit()

3.3. 拖放

你可以使用拖放,將元素移動一定量,或者移動到另一個元素:

element = driver.find_element_by_name("source")

target = driver.find_element_by_name("target")

from selenium.webdriver import ActionChains

action_chains = ActionChains(driver)

action_chains.drag_and_drop(element, target).perform()

3.4. 在窗戶和框架之間移動

現代Web應用程序很少沒有任何框架或被限制在單個窗口中。 WebDriver支持使用“switch_to_window”方法在命名窗口之間切換:

driver.switch_to_window("windowName")

接下來,對驅動程序的所有調用都將被解釋為定向到特定窗口。 但你怎麼知道窗口的名字? 看一下打開它的javascript或鏈接URL:

或者,你可以將“窗口句柄”傳遞給“switch_to_window()”方法。 通過這一方法,就可以迭代每個打開的窗口,如下所示:

for handle in driver.window_handles:

driver.switch_to_window(handle)

你也可以在iFrame幀進行切換:

driver.switch_to_frame("frameName")

可以通過用點分隔路徑來訪問子幀,也可以通過索引指定幀。

driver.switch_to_frame("frameName.0.child")

將轉到稱為“frameName”的幀的第一個子幀的名為“child”的幀。 所有幀都被評估為來自* top *。

一旦我們完成iFrame的處理,我們將不得不回到父IFrame,可以使用以下方法完成:

driver.switch_to_default_content()

3.5. 彈出對話框

Selenium WebDriver內置支持處理彈出對話框。 在觸發打開彈出窗口的操作後,你可以使用以下命令訪問彈出對話框:

alert = driver.switch_to_alert()

這將返回當前打開的彈出對話框對象。 使用此對象,你現在可以接受,關閉,讀取其內容,甚至可以鍵入提示。 此switch_to_alert方法在彈alerts窗,confirms確認彈窗和prompts提示等對話彈窗中同樣有效。 有關更多信息,請參閱API文檔。

3.6. 導航:歷史和位置

之前,我們介紹了使用“get”命令導航到頁面(driver.get(“http://www.example.com”))正如你所見,WebDriver有許多較小的,以任務為中心的界面, 和導航是一項有用的任務。 要導航到頁面,你可以使用get方法:driver.get("http://www.example.com")

要在瀏覽歷史記錄中前後移動:

driver.forward()

driver.back()

請注意,此功能完全取決於底層驅動程序(和具體瀏覽器有關)。 如果你習慣於一個瀏覽器的行為而不是另一個瀏覽器,那麼當你調用這些方法時,可能會發生不同的情況。

3.7. Cookies

在我們在不同頁面見跳轉,你可能有興趣瞭解如何使用cookie。 首先,需要在cookie的有效域上:

# Go to the correct domain

driver.get("http://www.example.com")

# Now set the cookie. This one's valid for t你he entire domain

cookie = {‘name’ : ‘foo’, ‘value’ : ‘bar’}

driver.add_cookie(cookie)

# And now output all the available cookies for the current URL

driver.get_cookies

---------------------------------------------------------------------

請關注pyhelloworld, 獲取更多精彩內容


分享到:


相關文章: