欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

譯:selenium webdriver (python)

系統(tǒng) 1628 0

譯:selenium webdriver (python)

2013-06-16 01:24 ?蟲(chóng)師 閱讀( ... ) 評(píng)論( ... ) 編輯 收藏

如果翻譯的很爛,原文檔地址:

http://docs.seleniumhq.org/docs/03_webdriver.jsp#firefox-driver

?

?

?

selenium?webdriver


注:?我們不斷的更新這份文檔,使這份文檔更加正確和完善;這份文檔相對(duì)來(lái)講也是比較準(zhǔn)確的。

?

webdriver的簡(jiǎn)介


硒2.0的主要新功能是集成的webdriver的API。webdriver的設(shè)計(jì)除了解決一些seleniumr-RC?API的一些限制,與webdriver?的整合,將提供一個(gè)更簡(jiǎn)單,更簡(jiǎn)潔的編程接口。selenium?webdriver會(huì)更好地支持動(dòng)態(tài)的網(wǎng)頁(yè),頁(yè)面本身被重新加載頁(yè)面元素可能更改。webdriver的目標(biāo)是提供一個(gè)設(shè)計(jì)良好的面向?qū)ο蟮腁PI,提供了更好的支持現(xiàn)代先進(jìn)的web-app測(cè)試。

?

WebDriver與Selenium-RC相比,是如何來(lái)驅(qū)動(dòng)瀏覽器的?


selenium?RC?的工作方式是為每一個(gè)支持的瀏覽器注入JavaScript函數(shù),能過(guò)瀏覽器加載,然后在瀏覽器中使用javascripts來(lái)驅(qū)動(dòng)AUT。

webdriver的不使用這種技術(shù),它直接調(diào)用每個(gè)瀏覽器內(nèi)置的自動(dòng)化支持;對(duì)于不同瀏覽器的調(diào)用取決于瀏覽器本身,每個(gè)瀏覽器驅(qū)動(dòng)的信息將會(huì)在后面的章節(jié)介紹。

?

webdriver?與selenium--server


?

你可能不需要selenium-server,這要看你怎么用selenium-webdriver了;如果你只使用webdriver的API?,那么是不需要selenium-server?的;如果你的測(cè)試和瀏覽器在同一臺(tái)機(jī)器上運(yùn)行,并且只使用webdriver的API?,那么也是不需要selenium-server的,webdriver?將直接運(yùn)行瀏覽器。

但在有些情況下,?Selenium-WebDriver是需要用到Selenium-Server?的:

?

·?您正在使用Selenium-Grid測(cè)試分發(fā)到多臺(tái)機(jī)器或虛擬機(jī)(VM)。

·?你連接到一臺(tái)遠(yuǎn)程的計(jì)算機(jī)上,在一個(gè)特定有瀏覽器版本上運(yùn)行

·?你不想用java(Python,?C#,?or?Ruby)綁定,而想用HtmlUnit?Driver

?

?

設(shè)置selenium?webdriver項(xiàng)目


?

要安裝selenium?之后需要建立一個(gè)項(xiàng)目,這樣就可以使用selenium寫(xiě)程序了你如何做到這一點(diǎn)取決于你的編程語(yǔ)言和開(kāi)發(fā)環(huán)境。?( 這里只介紹python的環(huán)境配置

?

Python


?

如果您正在使用Python測(cè)試自動(dòng)化,那么你可能已經(jīng)熟悉在Python開(kāi)發(fā)。那么你可以使用下面的命令添加selenium到Python環(huán)境。

pip?install?selenium

?

?

關(guān)于更具體的環(huán)境配置可以參考我這篇文檔:

http://www.cnblogs.com/fnng/archive/2013/05/29/3106515.html

?

關(guān)于python開(kāi)發(fā)的學(xué)習(xí)超出了本文的范圍,你可以通過(guò)python資源(官方文檔及其它相關(guān)資料、書(shū)籍)來(lái)快速的幫助你使用python進(jìn)行自動(dòng)化。

?

從selenium?1.0遷移


?

對(duì)于那些誰(shuí)已經(jīng)使用Selenium?1.0編寫(xiě)的測(cè)試套件的同學(xué),我們已經(jīng)提供了如何遷移到Selenium?2.0的提示。??Selenium?2.0的主要開(kāi)發(fā)人員,寫(xiě)了一篇文章從Selenium?1.0遷移。我們作為附錄。

?

從Selenium?RC遷移到selenium?webdriver:

http://docs.seleniumhq.org/docs/appendix_migrating_from_rc_to_webdriver.jsp#migrating-to-webdriver-reference

?

?

selenium?webdriver的API介紹


?

?注:這里只貼python語(yǔ)言的代碼

webdriver的是一個(gè)Web應(yīng)用程序測(cè)試自動(dòng)化工具,用來(lái)驗(yàn)證程序是否如預(yù)期的那樣執(zhí)行。它的目的是提供一個(gè)友好的API,比selenium?RC(1.0)API更容易使用,這將有助于使你的測(cè)試腳本更容易閱讀和維護(hù)。它不依賴于任何特定的測(cè)試框架,所以它可以用戶單元測(cè)試或者一個(gè)老式的“main”方法中。本節(jié)介紹webdriver的API,下面讓我們來(lái)幫助你熟悉它。

如果你已經(jīng)設(shè)置了項(xiàng)目,你就會(huì)發(fā)現(xiàn),webdriver的作用跟其它庫(kù)一樣:它是完全獨(dú)立的,你通常在使用之前不需要啟動(dòng)任何額外的進(jìn)程,或者運(yùn)行任何安裝程序,如果使用Selenium-RC則要到代理服務(wù)器。

?

注:需要額外的驅(qū)動(dòng)來(lái)使腳本在不同環(huán)境下運(yùn)行:Chrome?Driver,?Opera?Driver,?Android?Driver?andiPhone?Driver

現(xiàn)在我們來(lái)寫(xiě)一些代碼。打開(kāi)瀏覽器,輸入谷歌網(wǎng)頁(yè),并在搜索框內(nèi)輸入“Cheese”?點(diǎn)擊搜索,最后關(guān)閉瀏覽器。

                
                  
                    from
                  
                   selenium 
                  
                    import
                  
                  
                     webdriver

                  
                  
                    from
                  
                   selenium.common.exceptions 
                  
                    import
                  
                  
                     TimeoutException

                  
                  
                    from
                  
                   selenium.webdriver.support.ui 
                  
                    import
                  
                   WebDriverWait 
                  
                    #
                  
                  
                     available since 2.4.0
                  
                  
                    from
                  
                   selenium.webdriver.support 
                  
                    import
                  
                   expected_conditions as EC 
                  
                    #
                  
                  
                     available since 2.26.0
                  
                  
                    #
                  
                  
                     Create a new instance of the Firefox driver
                  
                  
driver =
                  
                     webdriver.Firefox()


                  
                  
                    #
                  
                  
                     go to the google home page
                  
                  
driver.get(
                  
                    "
                  
                  
                    http://www.google.com
                  
                  
                    "
                  
                  
                    )


                  
                  
                    #
                  
                  
                     find the element that's name attribute is q (the google search box)
                  
                  
inputElement = driver.find_element_by_name(
                  
                    "
                  
                  
                    q
                  
                  
                    "
                  
                  
                    )


                  
                  
                    #
                  
                  
                     type in the search
                  
                  
inputElement.send_keys(
                  
                    "
                  
                  
                    Cheese!
                  
                  
                    "
                  
                  
                    )


                  
                  
                    #
                  
                  
                     submit the form (although google automatically searches now without submitting)
                  
                  
                    inputElement.submit()


                  
                  
                    #
                  
                  
                     the page is ajaxy so the title is originally this:
                  
                  
                    print
                  
                  
                     driver.title


                  
                  
                    try
                  
                  
                    :
    
                  
                  
                    #
                  
                  
                     we have to wait for the page to refresh, the last thing that seems to be updated is the title
                  
                  
    WebDriverWait(driver, 10).until(EC.title_contains(
                  
                    "
                  
                  
                    cheese!
                  
                  
                    "
                  
                  
                    ))

    
                  
                  
                    #
                  
                  
                     You should see "cheese! - Google Search"
                  
                  
                    print
                  
                  
                     driver.title


                  
                  
                    finally
                  
                  
                    :
    driver.quit()
                  
                
              

在下面的章節(jié)中,您將了解更多有關(guān)如何使用webdriver的東西,如如何使用瀏覽器的前進(jìn)和后退功能(這在selenium?1.0中不能被很好的支持);以及如何使用框架和窗口測(cè)試網(wǎng)站。我們將會(huì)提供了更深入的討論和范例。

?

?

Selenium?webdriver的API命令和操作


?

取回頁(yè)面

你可能使用webdriver想要做的第一件事是導(dǎo)航到一個(gè)頁(yè)面,通過(guò)“get”可以輕松的做到之一點(diǎn)

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

?

webdriver的運(yùn)行依賴于幾個(gè)因素:包括操作系統(tǒng)/瀏覽器的組合,有時(shí)可能需要等待頁(yè)面加載。webdriver的在某些情況下,可能需要控制返回頁(yè)面的開(kāi)始與加載時(shí)間。為了確保腳本的穩(wěn)定性,需要等待的元素(S)在頁(yè)面中存在的?顯性和隱性的等待。

?

定位UI元素(WebElements)


?

參考:

http://www.cnblogs.com/fnng/archive/2012/01/12/2321117.html

自動(dòng)化要想模擬用戶(人)的行為操作,首先需要識(shí)別并定位UI上的元素,每個(gè)元素都有特定屬性,webdriver就是通過(guò)識(shí)別元素的屬性來(lái)定位元素。

我們可以通過(guò)下面的一些屬性或方法來(lái)定定位元素:

?

ID?


?

這是最有效和最優(yōu)選的方式來(lái)定位一個(gè)元素。常見(jiàn)的陷阱,開(kāi)發(fā)人員可以為元素設(shè)置非唯一的ID?,或通過(guò)自動(dòng)生成ID?,應(yīng)該避免這種情況。

如何通過(guò)ID的方式定位一個(gè)元素,看下面這樣的例子:

                
                  
"
coolestWidgetEvah " >...
element = driver.find_element_by_id( " coolestWidgetEvah " ) or from selenium.webdriver.common.by import By element = driver.find_element(by=By.ID, value= " coolestWidgetEvah " )

?

?

By?class?name


?

“class?”是指DOM元素的屬性。但在實(shí)際使用中有很多相同類(lèi)名的DOM元素,在發(fā)現(xiàn)多個(gè)相同類(lèi)名的元素時(shí),程序會(huì)默認(rèn)選擇最先找到的第一個(gè)元素。

如何通過(guò)類(lèi)名找到一個(gè)元素,看下面的例子:

              
                
class = " cheese " > Cheddar
class = " cheese " > Gouda
cheeses = driver.find_elements_by_class_name( " cheese " ) or from selenium.webdriver.common.by import By cheeses = driver.find_elements(By.CLASS_NAME, " cheese " )

?

?

By?tag?name?


?

DOM標(biāo)簽名稱(chēng)的元素。

具體方式如下面的例子:

              
                
                
                  
frame 
                
                = driver.find_element_by_tag_name(
                
                  "
                
                
                  iframe
                
                
                  "
                
                
                  )


                
                
                  or
                
                
                  from
                
                 selenium.webdriver.common.by 
                
                  import
                
                
                   By
frame 
                
                = driver.find_element(By.TAG_NAME, 
                
                  "
                
                
                  iframe
                
                
                  "
                
                
                  )
By name
                
              
            

?

?

?

查找并匹配元素的name屬性


?

具體方式如下面的例子:

              
                
                "
              
              
                cheese
              
              
                "
              
               type=
              
                "
              
              
                text
              
              
                "
              
              />
              
                

cheese 
              
              = driver.find_element_by_name(
              
                "
              
              
                cheese
              
              
                "
              
              
                )


              
              
                or
              
              
                from
              
               selenium.webdriver.common.by 
              
                import
              
              
                 By

cheese 
              
              = driver.find_element(By.NAME, 
              
                "
              
              
                cheese
              
              
                "
              
              
                )

By link text
              
            

?

?

?

通過(guò)鏈接文本找到元素匹配


?

例子如下:

              
                
                  "
                
              
              
                http://www.google.com/search?q=cheese
              
              
                "
              
              >cheese>
              
                
cheese 
              
              = driver.find_element_by_link_text(
              
                "
              
              
                cheese
              
              
                "
              
              
                )


              
              
                or
              
              
                from
              
               selenium.webdriver.common.by 
              
                import
              
              
                 By
cheese 
              
              = driver.find_element(By.LINK_TEXT, 
              
                "
              
              
                cheese
              
              
                "
              
              
                )
                
By Partial Link Text

?

?

?

通過(guò)查找部分鏈接文件匹配元素


?

例子如下:

              
                
                  "
                
              
              
                http://www.google.com/search?q=cheese
              
              
                "
              
              >search 
              
                for
              
               cheese>
              
                
cheese 
              
              = driver.find_element_by_partial_link_text(
              
                "
              
              
                cheese
              
              
                "
              
              
                )


              
              
                or
              
              
                from
              
               selenium.webdriver.common.by 
              
                import
              
              
                 By
cheese 
              
              = driver.find_element(By.PARTIAL_LINK_TEXT, 
              
                "
              
              
                cheese
              
              
                "
              
              )
            

?

?

?

By?CSS?


?

通過(guò)CSS的定位策略。默認(rèn)情況下本機(jī)瀏覽器支持CSS定位,所以,請(qǐng)參考W3C?CSS選擇器

?顯示一般可用的CSS選擇器的列表。如果瀏覽器沒(méi)有原生支持CSS查詢,可以使用Sizzle(Sizzle是一個(gè)純javascript?CSS選擇器引擎)。目前,IE?6,7和FF3.0使用Sizzle的CSS查詢引擎。

注意:不是所有瀏覽器對(duì)CSS的支持都是一樣的,可能在一個(gè)瀏覽器中運(yùn)行良好,切換到另一個(gè)瀏覽器則不然。

具體用法如下:

              
                
"
food " > class = " dairy " >milk class = " dairy aged " >cheese


cheese = driver.find_element_by_css_selector( " #food span.dairy.aged " ) or from selenium.webdriver.common.by import By cheese = driver.find_element(By.CSS_SELECTOR, " #food span.dairy.aged " ) By XPATH

?

在高的級(jí)別上,盡可能的使用一個(gè)瀏覽器原生的webdriver?XPath?的功能。在一些沒(méi)有本地的XPath支持的瀏覽器,我們已經(jīng)提供了我們自己的實(shí)現(xiàn)。這可能會(huì)導(dǎo)致一些意想不到的行為,除非你知道各種XPath引擎的差異。

驅(qū)動(dòng)

標(biāo)簽和屬性名稱(chēng)

屬性值

本地的XPath支持

HtmlUnit?Driver

小寫(xiě)

當(dāng)他們出現(xiàn)在HTML

Internet?Explorer?Driver

小寫(xiě)

當(dāng)他們出現(xiàn)在HTML

沒(méi)有

Firefox?Driver

不區(qū)分大小寫(xiě)

當(dāng)他們出現(xiàn)在HTML

?

這點(diǎn)抽象,對(duì)于下面這段HTML?代碼來(lái)說(shuō):

            
              
              "
            
            
              text
            
            
              "
            
             name=
            
              "
            
            
              example
            
            
              "
            
             />

            
            "
            
              text
            
            
              "
            
             name=
            
              "
            
            
              other
            
            
              "
            
             />
            
              
inputs 
            
            = driver.find_elements_by_xpath(
            
              "
            
            
              //input
            
            
              "
            
            
              )



            
            
              or
            
            
              from
            
             selenium.webdriver.common.by 
            
              import
            
            
               By
inputs 
            
            = driver.find_elements(By.XPATH, 
            
              "
            
            
              //input
            
            
              "
            
            )
          

?

?

不同驅(qū)動(dòng)對(duì)大小寫(xiě)的支持:

XPath?expression

HtmlUnit?Driver

Firefox?Driver

Internet?Explorer?Driver

//input

1?(“example”)

2

2

//INPUT

0

2

0

?

HTML元素有時(shí)并不需要顯式地聲明,因?yàn)樗麄兡J(rèn)為已知值的屬性。例如,“input”的標(biāo)簽并不需要的“type”屬性,因?yàn)樗J(rèn)為“text”。webdriver使用XPath時(shí),你不應(yīng)該期望能夠?qū)@些隱含的屬性相匹配。

?

?

使用JavaScript?


?

你可以執(zhí)行任意javascript來(lái)找到一個(gè)元素,只要你返回一個(gè)DOM元素,它將自動(dòng)轉(zhuǎn)換為一個(gè)WebElement對(duì)象。

簡(jiǎn)單的例子,在頁(yè)面上加載了jQuery:

            
              element = driver.execute_script(
              
                "
              
              
                return $('.cheese')[0]
              
              
                "
              
              )
            
          

?

在頁(yè)面上的每一個(gè)標(biāo)簽查找所有輸入元素:

            
              labels = driver.find_elements_by_tag_name(
              
                "
              
              
                label
              
              
                "
              
              
                )

inputs 
              
              =
              
                 driver.execute_script(

    
              
              
                "
              
              
                var labels = arguments[0], inputs = []; for (var i=0; i < labels.length; i++){
              
              
                "
              
               +

    
              
                "
              
              
                inputs.push(document.getElementById(labels[i].getAttribute('for'))); } return inputs;
              
              
                "
              
              , labels)
            
          

?

?

?

用戶輸入-填寫(xiě)表單


?

我們已經(jīng)看到了如何將文字輸入到一個(gè)文本或文本字段,但其他元素?您可以“切換”復(fù)選框的狀態(tài),你可以使用“點(diǎn)擊”設(shè)置類(lèi)似選擇的選項(xiàng)標(biāo)記。處理SELECT標(biāo)簽是不是太糟糕:

            
              select = driver.find_element_by_tag_name(
              
                "
              
              
                select
              
              
                "
              
              
                )

allOptions 
              
              = select.find_elements_by_tag_name(
              
                "
              
              
                option
              
              
                "
              
              
                )


              
              
                for
              
               option 
              
                in
              
              
                 allOptions:

    
              
              
                print
              
              
                "
              
              
                Value is: 
              
              
                "
              
               + option.get_attribute(
              
                "
              
              
                value
              
              
                "
              
              
                )

    option.click()
              
            
          

?

找到頁(yè)面上第一個(gè)“select”的元素,并通過(guò)每個(gè)選項(xiàng)依次循環(huán),打印出它們的值。你會(huì)發(fā)現(xiàn),這不是最有效處理SELECT元素的方式。在webdriver的支持類(lèi)中,有一個(gè)名為“select”,它提供了一些有用的方法,來(lái)處理這些交互。

            
              
                #
              
              
                 available since 2.12
              
              
                from
              
               selenium.webdriver.support.ui 
              
                import
              
              
                 Select

select 
              
              = Select(driver.find_element_by_tag_name(
              
                "
              
              
                select
              
              
                "
              
              
                ))

select.deselect_all()

select.select_by_visible_text(
              
              
                "
              
              
                Edam
              
              
                "
              
              )
            
          

?

?

從頁(yè)面上第一個(gè)選擇開(kāi)始取消所有選項(xiàng),從第一個(gè)選擇頁(yè)面上的所有選項(xiàng),然后選擇顯示的文本與“Edam”?的選項(xiàng)。

當(dāng)你完成填寫(xiě)表格,你可能要提交。我們需要找到“提交”按鈕,然后單擊它:

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

?

另外,有方便的方法可以在webdriver的每個(gè)元素上的“提交”。如果調(diào)用此表單內(nèi)的元素,webdriver通過(guò)的DOM按順序找到封閉的形式,然后調(diào)用該提交。如果該元素不是一種形式,那么會(huì)拋出NoSuchElementException異常:

            
              element.submit()
            
          

?

?

?

移動(dòng)Windows和框架(Frames)


?

一些web應(yīng)用程序有許多框架或多個(gè)窗口。通過(guò)webdriver的“switchTo”方法可以對(duì)他們呢進(jìn)行移動(dòng)操作。

            
              driver.switch_to_window(
              
                "
              
              
                windowName
              
              
                "
              
              )
            
          

?

?

調(diào)用驅(qū)動(dòng)程序現(xiàn)在解釋為被定向到特定的窗口。但是如何知道窗口的名字?以JavaScript或鏈接的方式打開(kāi)它看看:

            
              
                "
              
            
            
              somewhere.html
            
            
              "
            
             target=
            
              "
            
            
              windowName
            
            
              "
            
            >Click here to open a new window
          

?

?

另外,你也可以通過(guò)“window?handle”的“switchTo().window()”方法。認(rèn)識(shí)到這一點(diǎn),那么就可以遍歷所有打開(kāi)的窗口,像這樣:

            
              
                for
              
               handle 
              
                in
              
              
                 driver.window_handles:

    driver.switch_to_window(handle)
              
            
          

?

?

還可以切換從frames到frames(或到iframe中):

            
              driver.switch_to_frame(
              
                "
              
              
                frameName
              
              
                "
              
              )
            
          

?

?

訪問(wèn)子frames由一個(gè)圓點(diǎn)分隔的路徑,并且可以通過(guò)其索引指定frames。是:

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

would?go?to?the?frame?named?“child”?of?the?first?subframe?of?the?frame?called?“frameName”.All?frames?are?evaluated?as?if?from?*top*. ----- 實(shí)在不知道這個(gè)怎么翻譯

?

?

彈出對(duì)話框


?

Selenium?2.0測(cè)試版一開(kāi)始,內(nèi)置有處理彈出對(duì)話框支持。當(dāng)你觸發(fā)一個(gè)動(dòng)作,打開(kāi)一個(gè)彈出框,您將得到以下提醒:

            
              alert =
              
                 driver.switch_to_alert()


              
              
                #
              
              
                 usage: alert.dismiss(), etc.
              
            
          

這將返回當(dāng)前打開(kāi)的警報(bào)對(duì)象。有了這個(gè)對(duì)象,你現(xiàn)在可以接受,拒絕,讀取其內(nèi)容,甚至類(lèi)型會(huì)得到一個(gè)提示。這個(gè)接口同樣適用警告,確認(rèn)和提示。參考到的JavaDoc?或RubyDocs的的更多信息。

?

?

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


?

此前,我們介紹了webdriver的導(dǎo)航使用“get”命令

(driver.get(“http://www.example.com”)),我們?cè)谟行┣闆r下是要用到導(dǎo)航欄前進(jìn)和頭退功能:

            
              driver.get(
              
                "
              
              
                http://www.example.com
              
              
                "
              
              )  
              
                #
              
              
                 python doesn't have driver.navigate
              
            
          

?

?

重申:“navigate().to()”?和?“get()”??的效果是一樣的。一個(gè)只是很多比其他更容易輸入!

你可以隨意的使用瀏覽器歷史記錄中后退和前進(jìn)功能:

            
              driver.forward()

driver.back()
            
          

?請(qǐng)注意,此功能完全依賴于底層瀏覽器。當(dāng)你調(diào)用這些方法時(shí),在不同的瀏覽器下可能會(huì)發(fā)生意想不到的事情

?

?

Cookies


?

你可能會(huì)非常感興趣了解如何使用Cookie。首先,你需要知道cookie有效期。如果您想先預(yù)設(shè)的cookie,然后再開(kāi)始與網(wǎng)站進(jìn)行交互,你的主頁(yè)很大/且需要一段時(shí)間來(lái)加載,一個(gè)辦法是找到一個(gè)更小的網(wǎng)頁(yè)來(lái)代替,通常404頁(yè)小(http://example.com/some404page)

            
              
                #轉(zhuǎn)到正確的域

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

 

#現(xiàn)在在這里的整個(gè)域設(shè)置的cookie,

#這里的cookie的名稱(chēng)是
              
              
                '
              
              
                key
              
              
                '
              
              ,它的值是
              
                '
              
              
                value
              
              
                '
              
              
                的

driver.add_cookie({
              
              
                '
              
              
                name
              
              
                '
              
              :
              
                '
              
              
                key
              
              
                '
              
              , 
              
                '
              
              
                value
              
              
                '
              
              :
              
                '
              
              
                value
              
              
                '
              
              , 
              
                '
              
              
                path
              
              
                '
              
              :
              
                '
              
              
                /
              
              
                '
              
              
                })


              
              
                #
              
              
                 additional keys that can be passed in are:
              
              
                #
              
              
                 'domain' -> String,
              
              
                #
              
              
                 'secure' -> Boolean,
              
              
                #
              
              
                 'expiry' -> Milliseconds since the Epoch it should expire.
              
              
                

# 現(xiàn)在的輸出當(dāng)前URL的所有可用的cookies


              
              
                for
              
               cookie 
              
                in
              
              
                 driver.get_cookies():

    
              
              
                print
              
              
                "
              
              
                %s -> %s
              
              
                "
              
               % (cookie[
              
                '
              
              
                name
              
              
                '
              
              ], cookie[
              
                '
              
              
                value
              
              
                '
              
              
                ])



              
              
                #
              
              
                 You can delete cookies in 2 ways
              
              
                #
              
              
                 By name
              
              
                
driver.delete_cookie(
              
              
                "
              
              
                CookieName
              
              
                "
              
              
                )


              
              
                #
              
              
                 Or all of them
              
              
                
driver.delete_all_cookies()
              
            
          

?

?

?

更改用戶代理


?

這是很容易與Firefox的驅(qū)動(dòng)程序:

?

拖放


?

下面是一個(gè)例子使用執(zhí)行拖放動(dòng)作類(lèi)。本地事件事件需要被激活。

            
              
                from
              
               selenium.webdriver.common.action_chains 
              
                import
              
              
                 ActionChains
element 
              
              = driver.find_element_by_name(
              
                "
              
              
                source
              
              
                "
              
              
                )
target 
              
              =  driver.find_element_by_name(
              
                "
              
              
                target
              
              
                "
              
              
                )

ActionChains(driver).drag_and_drop(element, target).perform()
              
            
          

?

驅(qū)動(dòng)程序的細(xì)節(jié)和權(quán)衡

?

?

Selenium?webdriver的驅(qū)動(dòng)程序


?

?

參考:

http://www.cnblogs.com/fnng/archive/2012/02/10/2345187.html

?

?

?

webdriver的對(duì)于不同瀏覽器通過(guò)不同的接口實(shí)現(xiàn);下面介紹這幾種實(shí)現(xiàn)方式:

?

HtmlUnit的驅(qū)動(dòng)程序


?

這是目前最快,最輕量級(jí)的實(shí)施webdriver測(cè)試。正如它的名字所暗示的,這是基于HtmlUnit的。HtmlUnit是一個(gè)java實(shí)現(xiàn)基于web瀏覽器,沒(méi)有圖形用戶界面。對(duì)于任何語(yǔ)言綁定(Java以外)Selenium服務(wù)器需要使用此驅(qū)動(dòng)程序。

用法

            
              driver = webdriver.Remote(
              
                "
              
              
                http://localhost:4444/wd/hub
              
              
                "
              
              , webdriver.DesiredCapabilities.HTMLUNIT))
            
          

?

?

優(yōu)點(diǎn)

·?在Webdriver執(zhí)行自動(dòng)化最快的方式

·?一個(gè)純Java的解決方案,因此它是獨(dú)立于平臺(tái)的。

·?支持JavaScript的

缺點(diǎn)

·?模擬其他瀏覽器的JavaScript行為(見(jiàn)下文)

?

?

HtmlUnit驅(qū)動(dòng)器JavaScript?


?

沒(méi)有流行的瀏覽器使用JavaScript引擎,使用HtmlUnit(Rhino)。

如果你使用HtmlUnit測(cè)試JavaScript?,相比其他瀏覽?結(jié)果可能會(huì)不一樣。

?

當(dāng)我們說(shuō)“JavaScript”,其實(shí)我們說(shuō)的是“JavaScript和DOM”。雖然DOM是由W3C定義的,每個(gè)瀏覽器都有自己特點(diǎn)和差異,HtmlUnit?有一套完整的實(shí)現(xiàn)DOM的方案,能很好的支持JavaScript?,但有別與其他瀏覽器,和W3C標(biāo)準(zhǔn)的主流瀏覽器的DOM的實(shí)現(xiàn)存在差異,盡管其模仿其有他瀏覽器的能力。

在webdriver?,我們選擇使用HtmlUnit來(lái)測(cè)試Javascript?,不過(guò)這樣存在問(wèn)題和風(fēng)險(xiǎn),但有越來(lái)越多的網(wǎng)站依賴于JavaScript?,我們采取了保守的做法,HtmlUnit默認(rèn)情況下禁用JavaScript?。在webdriver的HtmlUnit的每個(gè)版本,我們重新評(píng)估這一決定:我們希望在一些點(diǎn)上HtmlUnit的默認(rèn)情況下啟用JavaScript。

?

?

啟用JavaScript?


?

啟用JavaScript的支持是很容易的:

            
              
                 
driver 
              
              = webdriver.Remote(
              
                "
              
              
                http://localhost:4444/wd/hub
              
              
                "
              
              , webdriver.DesiredCapabilities.HTMLUNITWITHJS)
            
          

?

?

?

?

這將導(dǎo)致HtmlUnit的驅(qū)動(dòng)程序默認(rèn)情況下,模擬火狐3.6的JavaScript進(jìn)行處理。

?

?

Firefox?Driver


?

用Firefox的插件來(lái)控制火狐瀏覽器,firefox?配置文件使用selenium.xpi(插件)。默認(rèn)情況下,需要修改一些設(shè)置(see?the?source?to?see?which?ones),火狐驅(qū)動(dòng)是能夠運(yùn)行在Windows,Mac,Linux上進(jìn)行測(cè)試。目前在版本3.6,10(這個(gè)版本早過(guò)時(shí)了)

用法

            
              driver = webdriver.Firefox()
            
          

?

?

優(yōu)點(diǎn)

·?在一個(gè)真正的瀏覽器上運(yùn)行,并支持JavaScript的

·?速度比Internet?Explorer的驅(qū)動(dòng)程序快

缺點(diǎn)

·?比HtmlUnit的驅(qū)動(dòng)程序慢

修改火狐簡(jiǎn)介

假設(shè)你想要修改的用戶代理字符串(如上述),但你已經(jīng)有了一個(gè)欺騙Firefox的配置文件,它包含許多有用的擴(kuò)展。有兩種方式獲得此配置文件。假設(shè)使用Firefox的配置文件管理器(火狐?ProfileManager),已創(chuàng)建配置:

另外,如果配置文件尚未在Firefox注冊(cè):

當(dāng)我們正在開(kāi)發(fā)firefox?啟動(dòng)的特性,我們能夠正常使用。

正如我們?cè)贔irefox?Driver,開(kāi)發(fā)功能,我們能夠使用。例如,直到我們感覺(jué)本機(jī)事件為L(zhǎng)inux上的Firefox是穩(wěn)定的,他們是默認(rèn)情況下禁用。要啟用它們:

            
              profile =
              
                 webdriver.FirefoxProfile()

profile.native_events_enabled 
              
              =
              
                 True

driver 
              
              = webdriver.Firefox(profile)
            
          

?

信息

請(qǐng)參閱火狐部分維基頁(yè)面的最新最先進(jìn)的信息。

?

?

Internet?Explorer?Driver


?

該驅(qū)動(dòng)程序控制.dll,因而只適用于Windows操作系統(tǒng)。每個(gè)selenium釋放它的核心功能在xp下測(cè)試IE版本6,7和8,在Windows7下測(cè)試IE?9。

用法

            
              driver = webdriver.Ie()
            
          

?

?

優(yōu)點(diǎn)

·?運(yùn)行在一個(gè)真正的瀏覽器支持JavaScript與最終用戶看到的所有的行為一致

缺點(diǎn)

·?顯然,Internet?Explorer?Driver只能在Windows上工作!

·?相對(duì)緩慢(盡管仍然是相當(dāng)快速的)

·?本身不支持XPath的大多數(shù)版本。自動(dòng)注入,這是明顯慢于其他瀏覽器和進(jìn)行比較時(shí),在同一瀏覽器的CSS選擇器變慢。

·?本身不支持CSS版本6和7。

·?CSS選擇器在IE?8和9是本地的,但這些瀏覽器不完全支持CSS3

信息

維基頁(yè)面的最先進(jìn)的最新信息,請(qǐng)參閱Internet?Explorer的部分。請(qǐng)?zhí)貏e注意所需的配置部分。

?

?

Chrome驅(qū)動(dòng)


?

Chrome驅(qū)動(dòng)程序維護(hù)/支持Chrome?項(xiàng)目本身。webdriver的工作與Chrome通過(guò)的chromedriver二進(jìn)制(Chrome項(xiàng)目的下載頁(yè)面上找到)。你需要有兩個(gè)chromedriver和安裝一個(gè)版本的Chrome瀏覽器。為了webdriver的自動(dòng)找到,chromedriver需要要放在系統(tǒng)的路徑上。Chrome瀏覽器本身由chromedriver在默認(rèn)安裝路徑找到。這些都可以通過(guò)環(huán)境變量覆蓋。?有關(guān)更多信息,請(qǐng)參閱維基。

用法

            
              driver = webdriver.Chrome()
            
          

?

?

優(yōu)點(diǎn)

·?在一個(gè)真正的瀏覽器上運(yùn)行,并支持JavaScript的

·?因?yàn)镃hrome是基于Webkit的瀏覽器,Chrome?Driver會(huì)允許您驗(yàn)證您的網(wǎng)站在Safari的測(cè)試效果。需要注意的是,因?yàn)闉g覽器使用其自己的V8?JavaScript引擎,而不是Safari瀏覽器的Nitro引擎,JavaScript的執(zhí)行可能會(huì)有所不同。

缺點(diǎn)

·?比HtmlUnit的驅(qū)動(dòng)程序慢

·?

信息

最先進(jìn)的最新信息,請(qǐng)參閱我們的wiki。更多信息,也可以找到下載頁(yè)面

?

獲取與Chrome驅(qū)動(dòng)程序運(yùn)行

鉻驅(qū)動(dòng)程序可執(zhí)行文件下載?,并按照其他的wiki頁(yè)面上的說(shuō)明

Opera?Driver

見(jiàn)歌劇院驅(qū)動(dòng)器在上使用Opera驅(qū)動(dòng)程序的信息的selenium維基wiki文章。

iPhone?Driver

查看iPhone的驅(qū)動(dòng)selenium維基上使用Mac的iOS驅(qū)動(dòng)程序的信息,wiki文章。

Android?Driver

查看Android的驅(qū)動(dòng)程序?硒selenium維基采用了Android驅(qū)動(dòng)程序的信息,wiki文章。

?

?

混合使用webdriver和RC技術(shù)


?

Webdriver替換selenium?RC?

webdriver的Java版本的selenium?RC?API提供了一種實(shí)現(xiàn)。這意味著,你可以使用Selenium-RC?API和使用底層webdriver的技術(shù)。這主要是用于向后兼容。它允許那些使用selenium?RC?API的用戶使用webdriver覆蓋現(xiàn)有的測(cè)試套件。它提供幫助緩解遷移到selenium?webdriver。此外,允許一個(gè)人使用這兩個(gè)API,在相同的測(cè)試代碼。

Selenium?webdriver的使用是這樣的:

優(yōu)點(diǎn)

·?webdriver的和selenium的API允許并排存在

·?webdriver的遷移管理機(jī)制提供了一個(gè)簡(jiǎn)單的Selenium?RC?API

·?不需要獨(dú)立的Selenium?RC服務(wù)器的運(yùn)行

缺點(diǎn)

·?不能支持每一個(gè)方法

·?更多先進(jìn)的selenium使用(using?“browserbot”?or?other?built-in?JavaScript?methods?from?Selenium?Core)可能無(wú)法正常工作

·?由于底層實(shí)現(xiàn)差異,有些方法可能會(huì)比較慢

備份webdriver與selenium

webdriver的盡可能多兼容selenium?RC對(duì)瀏覽器的支持,同時(shí)仍然提供支持使用webdriver的API,所以為了您可以利用SeleneseCommandExecutor

Safari是支持這種方式,用下面的代碼(確保禁用彈出窗口攔截功能):

這種方法目前有一些主要限制,尤其是findElements并不如預(yù)期般運(yùn)作。此外,繁重的驅(qū)動(dòng)瀏覽器,因?yàn)槲覀兪褂玫氖莝elenium?的核心,你的JavaScript沙箱限制。

運(yùn)行獨(dú)立Selenium服務(wù)器使用RemoteDrivers?

從selenium?的下載頁(yè)下載服務(wù)器獨(dú)立 .jar和可選的IEDriverServer。如果您打算使用Chrome,從Google?Code上下載。

拆開(kāi)IEDriverServer和(或)chromedriver,并把它們?cè)??PATH?/%PATH%?-?Selenium服務(wù)器上的一個(gè)目錄,這是應(yīng)該能夠IE?/?Chrome的處理請(qǐng)求,而無(wú)需額外的修改。

啟動(dòng)服務(wù)器的命令行

            
              java -jar 
              
                /selenium-server-standalone-
                
                  .jar
                
              
            
          

?

?

如果你想使用原生的事件功能,表明在命令行上的選項(xiàng)

            
              Dwebdriver.enable.native.events = 1
            
          

?

?

對(duì)于其他命令行選項(xiàng),執(zhí)行

            
              java -jar 
              
                /selenium-server-standalone-
                
                  .jar -help
                
              
            
          

?

?

為了正常工作,應(yīng)該允許以下端口傳入的TCP連接:??4444,7054-5(or?twice?as?many?ports?as?the?number?of?concurrent?instances?you?plan?to?run)。在Windows下,你可能需要以及疏通各種應(yīng)用。

?

?

?


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

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

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

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

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 久久精品一 | 毛片毛片毛片毛片毛片毛片 | 天天视频在线播放观看视频 | 98香蕉草草视频在线精品看 | 国产特级毛片AAAAAAA高清 | 嫩草影院国产 | 2017av伦理片 | 日韩成人性视频 | 91九色视频观看 | www.在线播放 | 日韩成人在线视频 | 两性视频网 | 亚洲欧美国产日产综合不卡 | 婷婷久久五月天 | 一区二区三区免费看 | 日本高清视频免费在线观看 | 国产极品久久 | 色午夜 | 神秘电影91 | 午夜国产在线视频 | 91在线品视觉盛宴免费 | 国产一区二区三区在线看片 | 五月婷婷丁香在线观看 | 污污视频免费网站 | 久久99精品久久久久久琪琪 | 久久成 | 国产午夜精品一区二区三区在线观看 | 91se在线看片国产免费观看 | 成人在线视频精品 | 天天干天天在线 | 中文字幕免费 | 国产精品手机在线观看 | 亚洲国产aⅴ成人精品无吗 最新国产网址 | 91懂色| 私色综合网 | 美女91| www.夜夜操.com | 精品久久久久久亚洲 | 久爱www成人网免费视频 | www一区| 九色传媒|