亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Selenium Python bindings 文檔二

系統(tǒng) 1938 0

2012年5月13日 隨筆檔案 - 小樓 - 博客園

3 跳轉(zhuǎn)

使用Webdriver要做的第一件事情是跳轉(zhuǎn)到一個(gè)頁(yè)面。一般的方式是通過調(diào)用get方法。

driver.get( "http://www.python.org" )

WebDriver在返回對(duì)測(cè)試或腳本的控制之前一直等到頁(yè)面完全載入為止。但是如果頁(yè)面使用了很多AJAX,WebDriver也許不知道什么時(shí)候頁(yè)面會(huì)完全載入,就不值得這么做了。如果你需要確保這樣的頁(yè)面完全載入,可以使用waits方法。

3.1 與頁(yè)面交互

只是能到達(dá)頁(yè)面并不是十分有用,我們很想做的是與頁(yè)面交互。或者,更精確地。與頁(yè)面里的HTML元素。首先,我們需要找到一個(gè)元素。WebDriver提供了很多方法來需找元素。假設(shè)一個(gè)元素定義為:

        <input type="text" name="passwd" id="passwd-id" />
      

你可以使用以下方法去找到這個(gè)元素:

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’]”)

還可以通過文字找到一個(gè)鏈接,但是要小心!這個(gè)文字必須是完全匹配!在WebDriver里使用XPATH也要小心。 如果有多個(gè)元素滿足查詢,將只有第一個(gè)滿足條件的被返回。如果沒有發(fā)現(xiàn)任何元素,將會(huì)報(bào)NoSuchElementException。

WebDriver 有一個(gè)基于對(duì)象的API。我們使用相同的接口來代表各種元素。這意味著在使用IDE的自動(dòng)完成功能的時(shí)候,你或許看到很多可以調(diào)用的方法。但是不是所有的都行得通或者可行。但是無需擔(dān)心!WebDriver將試圖去做正確的事情,而且如果你調(diào)用了一個(gè)行不通的方法,會(huì)拋出一個(gè)異常。

你得到了一個(gè)元素,你能做什么呢?首先,你也許想在輸入框中輸入一段文字。

Element.send_keys(“some text”)

你可以通過Keys類模仿按箭頭鍵

Element.send_keys(“and some”, Keys.ARROW_DOWN)

在任意元素上都是可以調(diào)用send_keys的,這使得測(cè)試鍵盤快捷鍵比如用在Gmail上的,成為可能。一個(gè)副作用是在輸入框中輸入字符將不會(huì)自動(dòng)清空。反而,你輸入的將會(huì)被添加在已有文本之后。你可以很容易使用clear方法清空輸入框或輸入?yún)^(qū)域的內(nèi)容。

Element.clear()

3.2 填充表單

我們已經(jīng)看到如何在輸入框里輸入字符,但是,其他元素呢?你可以選擇選擇框的狀態(tài),你可以使用setSelected來設(shè)置比如選項(xiàng)標(biāo)簽為選中狀態(tài)。處理SELECT選項(xiàng)并不是太壞。

Select = driver.find_element_by_xpath(“//select”)

All_options = select.find_element_by_tag_name(“option”)

For option in all_options:

Print “value is: %s” %option.get_attribute(“value”)

Option.click()

這將會(huì)發(fā)現(xiàn)頁(yè)面上第一個(gè)SELECT元素,然后循環(huán)通過每一根的OPTION,打印出他們的值,然后依次選中每個(gè)。

當(dāng)你完成填充表單之后,你也許想提交它。一個(gè)辦法是找到submit按鈕并點(diǎn)擊它。

# Assume the button has the ID “submit”

Driver.find_element_by_id(‘submit’).click()

或者,WebDriver在每個(gè)元素上都有很方便的submit方法。如果你在一個(gè)form的元素上調(diào)用這個(gè)方法,WebDriver將會(huì)查詢DOM樹,直至發(fā)現(xiàn)包含它的form然后調(diào)用submit。如果元素沒有在form里面,將會(huì)拋出NoSuchElementExcellent

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)

?

3.4 在窗口和幀之間移動(dòng)

在現(xiàn)在的web應(yīng)用中很少窗口里沒有任何幀。WebDriver支持使用switch_to_window方法在命名窗口里移動(dòng)。

Driver.switch_to_window(“windowName”)

所有對(duì)driver的調(diào)用現(xiàn)在都被解釋為直接到特定的窗口。但是如何知道窗口的名字?看一下打開窗口的javascript或者鏈接。

<a href=”somewhere.html” target=”windowName”>Click here to open a new window</a>

作為選擇,你可以傳一個(gè)窗口句柄給switch_to_window()方法。知道這個(gè),就可以再每個(gè)打開的窗口之間迭代訪問

For handle in driver.window_handlers:

Driver.switch_to_window(handle)

也可以在幀之間切換

Driver.switch_to_frame(“frameName”)

也可以通過用點(diǎn)分解路徑訪問子幀,可以通過指定index來確定幀。

Driver.switch_to_frame(frameName.0.child)

?

3.5 彈出窗口

Selenium WebDriver有對(duì)處理彈出窗口的內(nèi)置支持。在你激發(fā)一個(gè)動(dòng)作可以打開一個(gè)彈出窗口,你可以通過以下方式訪問alert。

Alert = driver.switch_to_alert()

這將返回當(dāng)前打開的警告對(duì)象。通過這個(gè)對(duì)象,你可以接受,取消,讀取它的內(nèi)容或甚至在提示里輸入內(nèi)容。這個(gè)借口在警告,確認(rèn),提示里工作的一樣好。

?

3.6 導(dǎo)航:歷史和定位

早先,我們使用get方法來涵蓋跳轉(zhuǎn)。如你所見,WebDriver有很多更小的,任務(wù)集中的接口,導(dǎo)航是一個(gè)很有用的任務(wù)。為了跳轉(zhuǎn)到一個(gè)頁(yè)面,你可以使用get方法:driver.get(“http://www.example.com”)

為了在瀏覽器歷史里向前或向后移動(dòng):

Driver.forward()

Driver.back()

請(qǐng)注意這個(gè)功能完全依賴于潛在的驅(qū)動(dòng)。

?

3.7 Cookies

Driver.get(“http://www.example.com”)

# Now set the cookie. This one is valid for the entire domain

Cookie = {“key”: “value”}

Driver.add_cookie(cookie)

?

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

All_cookies = driver.get_cookies()

For cookie_name, cookie_value in all_cookies.items():

Print “%s -> %s”, cookie_name, cookie_value

?

4 定位元素

有很多種在頁(yè)面上定位元素的策略。你可以使用對(duì)你case最合適的那種。Selenium提供下列方法來定位頁(yè)面上的元素

Find_element_by_id

Find_element_by_name

Find_element_by_xpath

Find_element_by_link_text

Find_element_by_partial_link_text

Find_element_by_tag_name

Find_element_by_class_name

Find_element_by_css_selector

?

發(fā)現(xiàn)多個(gè)元素(這些方法將返回一個(gè)列表)

Find_elements_by_name

Find_elements_by_xpath

Find_elements_by_link_text

Find_elements_by_partial_link_text

Find_elements_by_tag_name

Find_elements_by_class_name

Find_elements_by_css_selector

4.1 通過ID定位元素

當(dāng)你知道元素的id屬性的時(shí)候使用這個(gè)方法。通過這個(gè)策略,匹配定位的第一個(gè)具有id屬性的元素將被返回,如果沒有元素具有id屬性,拋出NoSuchElementException。

例如,考慮下頁(yè)面源文件

<html>

?<body>

? <form id="loginForm">

?? <input name="username" type="text" />

?? <input name="password" type="password" />

?? <input name="continue" type="submit" value="Login" />

? </form>

?</body>

<html>

Form元素可以被如此定位:login_form = driver.find_element_by_id(“l(fā)oginForm”)

?

4.2 通過名字定位

當(dāng)你知道元素的name屬性的時(shí)候使用這個(gè)方法。通過這個(gè)策略,匹配定位的第一個(gè)具有name屬性的元素將被返回,如果沒有元素具有name屬性,拋出NoSuchElementException。

例如,考慮下頁(yè)面源文件

<html>

?<body>

? <form id="loginForm">

?? <input name="username" type="text" />

?? <input name="password" type="password" />

?? <input name="continue" type="submit" value="Login" />

?? <input name="continue" type="button" value="Clear" />

? </form>

</body>

<html>

用戶名和密碼元素可以如下定位:

Username = driver.find_element_by_name(“username”)

Password = driver.find_element_by_name(“password”)

Continue = driver.find_element_by_name(“Continue”)

?

4.3 通過xpath定位

Xpath是用來在XML文檔中定位節(jié)點(diǎn)的語(yǔ)言。

例如,考慮下頁(yè)面源文件

<html>

?<body>

? <form id="loginForm">

?? <input name="username" type="text" />

?? <input name="password" type="password" />

?? <input name="continue" type="submit" value="Login" />

?? <input name="continue" type="button" value="Clear" />

? </form>

</body>

<html>

Form元素可以如下定位:

Selenium Python bindings 文檔二


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 欧美劲爆第一页 | 91九色在线视频 | 亚洲精品96欧美一区二区 | 日韩精品一区二区三区免费观看 | 日日爽爽 | 色综合天天综合网看在线影院 | 午夜香蕉成视频人网站高清版 | 曰本一区二区 | 国产色视频在线 | 日本强不卡在线观看 | 中文字幕在线免费播放 | 国产伦久视频免费观看视频 | 亚洲一区国产 | 伊人不卡久久大香线蕉综合影院 | 久久精品国产乱子伦多人 | 中文字幕一区在线观看视频 | 国产免费爱在线观看视频 | 日本一区二区三区中文字幕 | 色综合亚洲天天综合网站 | 日日艹夜夜 | 亚洲另类伦春色综合妖色成人网 | 精品国产成人 | 日韩伦理亚洲欧美在线一区 | 中文字幕日韩亚洲 | 国内精品久久久久影院亚洲 | 亚洲色啦啦狠狠网站 | 黄色高清网站 | 免费网站成人亚洲 | 亚洲天堂福利视频 | 五月天激情在线 | 又黄又爽又色的免费毛片 | 一级毛片一级毛片a毛片欧美 | 亚洲最色| 精品亚洲一区二区在线播放 | 久久伊人一区二区三区四区 | a毛片在线免费观看 | 国产东北露脸对白 | 亚洲一区二区三区影院 | 免费超爽大片黄网站 | 欧美一级黄色片在线观看 | 99re6这里有精品热视频在线 |