译:selenium webdriver (python)

系统 1615 0

译:selenium webdriver (python)

2013-06-16 01:24  虫师 阅读( ... ) 评论( ... ) 编辑 收藏

如果翻译的很烂,原文档地址:

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

 

 

 

selenium webdriver


注: 我们不断的更新这份文档,使这份文档更加正确和完善;这份文档相对来讲也是比较准确的。

 

webdriver的简介


硒2.0的主要新功能是集成的webdriver的API。webdriver的设计除了解决一些seleniumr-RC API的一些限制,与webdriver 的整合,将提供一个更简单,更简洁的编程接口。selenium webdriver会更好地支持动态的网页,页面本身被重新加载页面元素可能更改。webdriver的目标是提供一个设计良好的面向对象的API,提供了更好的支持现代先进的web-app测试。

 

WebDriver与Selenium-RC相比,是如何来驱动浏览器的?


selenium RC 的工作方式是为每一个支持的浏览器注入JavaScript函数,能过浏览器加载,然后在浏览器中使用javascripts来驱动AUT。

webdriver的不使用这种技术,它直接调用每个浏览器内置的自动化支持;对于不同浏览器的调用取决于浏览器本身,每个浏览器驱动的信息将会在后面的章节介绍。

 

webdriver 与selenium--server


 

你可能不需要selenium-server,这要看你怎么用selenium-webdriver了;如果你只使用webdriver的API ,那么是不需要selenium-server 的;如果你的测试和浏览器在同一台机器上运行,并且只使用webdriver的API ,那么也是不需要selenium-server的,webdriver 将直接运行浏览器。

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

 

· 您正在使用Selenium-Grid测试分发到多台机器或虚拟机(VM)。

· 你连接到一台远程的计算机上,在一个特定有浏览器版本上运行

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

 

 

设置selenium webdriver项目


 

要安装selenium 之后需要建立一个项目,这样就可以使用selenium写程序了你如何做到这一点取决于你的编程语言和开发环境。 ( 这里只介绍python的环境配置

 

Python


 

如果您正在使用Python测试自动化,那么你可能已经熟悉在Python开发。那么你可以使用下面的命令添加selenium到Python环境。

pip install selenium

 

 

关于更具体的环境配置可以参考我这篇文档:

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

 

关于python开发的学习超出了本文的范围,你可以通过python资源(官方文档及其它相关资料、书籍)来快速的帮助你使用python进行自动化。

 

从selenium 1.0迁移


 

对于那些谁已经使用Selenium 1.0编写的测试套件的同学,我们已经提供了如何迁移到Selenium 2.0的提示。​​Selenium 2.0的主要开发人员,写了一篇文章从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语言的代码

webdriver的是一个Web应用程序测试自动化工具,用来验证程序是否如预期的那样执行。它的目的是提供一个友好的API,比selenium RC(1.0)API更容易使用,这将有助于使你的测试脚本更容易阅读和维护。它不依赖于任何特定的测试框架,所以它可以用户单元测试或者一个老式的“main”方法中。本节介绍webdriver的API,下面让我们来帮助你熟悉它。

如果你已经设置了项目,你就会发现,webdriver的作用跟其它库一样:它是完全独立的,你通常在使用之前不需要启动任何额外的进程,或者运行任何安装程序,如果使用Selenium-RC则要到代理服务器。

 

注:需要额外的驱动来使脚本在不同环境下运行:Chrome Driver, Opera Driver, Android Driver andiPhone Driver

现在我们来写一些代码。打开浏览器,输入谷歌网页,并在搜索框内输入“Cheese” 点击搜索,最后关闭浏览器。

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

在下面的章节中,您将了解更多有关如何使用webdriver的东西,如如何使用浏览器的前进和后退功能(这在selenium 1.0中不能被很好的支持);以及如何使用框架和窗口测试网站。我们将会提供了更深入的讨论和范例。

 

 

Selenium webdriver的API命令和操作


 

取回页面

你可能使用webdriver想要做的第一件事是导航到一个页面,通过“get”可以轻松的做到之一点

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

 

webdriver的运行依赖于几个因素:包括操作系统/浏览器的组合,有时可能需要等待页面加载。webdriver的在某些情况下,可能需要控制返回页面的开始与加载时间。为了确保脚本的稳定性,需要等待的元素(S)在页面中存在的 显性和隐性的等待。

 

定位UI元素(WebElements)


 

参考:

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

自动化要想模拟用户(人)的行为操作,首先需要识别并定位UI上的元素,每个元素都有特定属性,webdriver就是通过识别元素的属性来定位元素。

我们可以通过下面的一些属性或方法来定定位元素:

 

ID 


 

这是最有效和最优选的方式来定位一个元素。常见的陷阱,开发人员可以为元素设置非唯一的ID ,或通过自动生成ID ,应该避免这种情况。

如何通过ID的方式定位一个元素,看下面这样的例子:

                
                  
"
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元素的属性。但在实际使用中有很多相同类名的DOM元素,在发现多个相同类名的元素时,程序会默认选择最先找到的第一个元素。

如何通过类名找到一个元素,看下面的例子:

              
                
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标签名称的元素。

具体方式如下面的例子:

              
                
                
                  
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
              
            

 

 

 

通过链接文本找到元素匹配


 

例子如下:

              
                
                  "
                
              
              
                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

 

 

 

通过查找部分链接文件匹配元素


 

例子如下:

              
                
                  "
                
              
              
                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 


 

通过CSS的定位策略。默认情况下本机浏览器支持CSS定位,所以,请参考W3C CSS选择器

 显示一般可用的CSS选择器的列表。如果浏览器没有原生支持CSS查询,可以使用Sizzle(Sizzle是一个纯javascript CSS选择器引擎)。目前,IE 6,7和FF3.0使用Sizzle的CSS查询引擎。

注意:不是所有浏览器对CSS的支持都是一样的,可能在一个浏览器中运行良好,切换到另一个浏览器则不然。

具体用法如下:

              
                
"
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

 

在高的级别上,尽可能的使用一个浏览器原生的webdriver XPath 的功能。在一些没有本地的XPath支持的浏览器,我们已经提供了我们自己的实现。这可能会导致一些意想不到的行为,除非你知道各种XPath引擎的差异。

驱动

标签和属性名称

属性值

本地的XPath支持

HtmlUnit Driver

小写

当他们出现在HTML

Internet Explorer Driver

小写

当他们出现在HTML

没有

Firefox Driver

不区分大小写

当他们出现在HTML

 

这点抽象,对于下面这段HTML 代码来说:

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

 

 

不同驱动对大小写的支持:

XPath expression

HtmlUnit Driver

Firefox Driver

Internet Explorer Driver

//input

1 (“example”)

2

2

//INPUT

0

2

0

 

HTML元素有时并不需要显式地声明,因为他们默认为已知值的属性。例如,“input”的标签并不需要的“type”属性,因为它默认为“text”。webdriver使用XPath时,你不应该期望能够对这些隐含的属性相匹配。

 

 

使用JavaScript 


 

你可以执行任意javascript来找到一个元素,只要你返回一个DOM元素,它将自动转换为一个WebElement对象。

简单的例子,在页面上加载了jQuery:

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

 

在页面上的每一个标签查找所有输入元素:

            
              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)
            
          

 

 

 

用户输入-填写表单


 

我们已经看到了如何将文字输入到一个文本或文本字段,但其他元素?您可以“切换”复选框的状态,你可以使用“点击”设置类似选择的选项标记。处理SELECT标签是不是太糟糕:

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

 

找到页面上第一个“select”的元素,并通过每个选项依次循环,打印出它们的值。你会发现,这不是最有效处理SELECT元素的方式。在webdriver的支持类中,有一个名为“select”,它提供了一些有用的方法,来处理这些交互。

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

 

 

从页面上第一个选择开始取消所有选项,从第一个选择页面上的所有选项,然后选择显示的文本与“Edam” 的选项。

当你完成填写表格,你可能要提交。我们需要找到“提交”按钮,然后单击它:

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

 

另外,有方便的方法可以在webdriver的每个元素上的“提交”。如果调用此表单内的元素,webdriver通过的DOM按顺序找到封闭的形式,然后调用该提交。如果该元素不是一种形式,那么会抛出NoSuchElementException异常:

            
              element.submit()
            
          

 

 

 

移动Windows和框架(Frames)


 

一些web应用程序有许多框架或多个窗口。通过webdriver的“switchTo”方法可以对他们呢进行移动操作。

            
              driver.switch_to_window(
              
                "
              
              
                windowName
              
              
                "
              
              )
            
          

 

 

调用驱动程序现在解释为被定向到特定的窗口。但是如何知道窗口的名字?以JavaScript或链接的方式打开它看看:

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

 

 

另外,你也可以通过“window handle”的“switchTo().window()”方法。认识到这一点,那么就可以遍历所有打开的窗口,像这样:

            
              
                for
              
               handle 
              
                in
              
              
                 driver.window_handles:

    driver.switch_to_window(handle)
              
            
          

 

 

还可以切换从frames到frames(或到iframe中):

            
              driver.switch_to_frame(
              
                "
              
              
                frameName
              
              
                "
              
              )
            
          

 

 

访问子frames由一个圆点分隔的路径,并且可以通过其索引指定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*. ----- 实在不知道这个怎么翻译

 

 

弹出对话框


 

Selenium 2.0测试版一开始,内置有处理弹出对话框支持。当你触发一个动作,打开一个弹出框,您将得到以下提醒:

            
              alert =
              
                 driver.switch_to_alert()


              
              
                #
              
              
                 usage: alert.dismiss(), etc.
              
            
          

这将返回当前打开的警报对象。有了这个对象,你现在可以接受,拒绝,读取其内容,甚至类型会得到一个提示。这个接口同样适用警告,确认和提示。参考到的JavaDoc 或RubyDocs的的更多信息。

 

 

导航:历史和位置


 

此前,我们介绍了webdriver的导航使用“get”命令

(driver.get(“http://www.example.com”)),我们在有些情况下是要用到导航栏前进和头退功能:

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

 

 

重申:“navigate().to()” 和 “get()”  的效果是一样的。一个只是很多比其他更容易输入!

你可以随意的使用浏览器历史记录中后退和前进功能:

            
              driver.forward()

driver.back()
            
          

 请注意,此功能完全依赖于底层浏览器。当你调用这些方法时,在不同的浏览器下可能会发生意想不到的事情

 

 

Cookies


 

你可能会非常感兴趣了解如何使用Cookie。首先,你需要知道cookie有效期。如果您想先预设的cookie,然后再开始与网站进行交互,你的主页很大/且需要一段时间来加载,一个办法是找到一个更小的网页来代替,通常404页小(http://example.com/some404page)

            
              
                #转到正确的域

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

 

#现在在这里的整个域设置的cookie,

#这里的cookie的名称是
              
              
                '
              
              
                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.
              
              
                

# 现在的输出当前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的驱动程序:

 

拖放


 

下面是一个例子使用执行拖放动作类。本地事件事件需要被激活。

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

 

驱动程序的细节和权衡

 

 

Selenium webdriver的驱动程序


 

 

参考:

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

 

 

 

webdriver的对于不同浏览器通过不同的接口实现;下面介绍这几种实现方式:

 

HtmlUnit的驱动程序


 

这是目前最快,最轻量级的实施webdriver测试。正如它的名字所暗示的,这是基于HtmlUnit的。HtmlUnit是一个java实现基于web浏览器,没有图形用户界面。对于任何语言绑定(Java以外)Selenium服务器需要使用此驱动程序。

用法

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

 

 

优点

· 在Webdriver执行自动化最快的方式

· 一个纯Java的解决方案,因此它是独立于平台的。

· 支持JavaScript的

缺点

· 模拟其他浏览器的JavaScript行为(见下文)

 

 

HtmlUnit驱动器JavaScript 


 

没有流行的浏览器使用JavaScript引擎,使用HtmlUnit(Rhino)。

如果你使用HtmlUnit测试JavaScript ,相比其他浏览 结果可能会不一样。

 

当我们说“JavaScript”,其实我们说的是“JavaScript和DOM”。虽然DOM是由W3C定义的,每个浏览器都有自己特点和差异,HtmlUnit 有一套完整的实现DOM的方案,能很好的支持JavaScript ,但有别与其他浏览器,和W3C标准的主流浏览器的DOM的实现存在差异,尽管其模仿其有他浏览器的能力。

在webdriver ,我们选择使用HtmlUnit来测试Javascript ,不过这样存在问题和风险,但有越来越多的网站依赖于JavaScript ,我们采取了保守的做法,HtmlUnit默认情况下禁用JavaScript 。在webdriver的HtmlUnit的每个版本,我们重新评估这一决定:我们希望在一些点上HtmlUnit的默认情况下启用JavaScript。

 

 

启用JavaScript 


 

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

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

 

 

 

 

这将导致HtmlUnit的驱动程序默认情况下,模拟火狐3.6的JavaScript进行处理。

 

 

Firefox Driver


 

用Firefox的插件来控制火狐浏览器,firefox 配置文件使用selenium.xpi(插件)。默认情况下,需要修改一些设置(see the source to see which ones),火狐驱动是能够运行在Windows,Mac,Linux上进行测试。目前在版本3.6,10(这个版本早过时了)

用法

            
              driver = webdriver.Firefox()
            
          

 

 

优点

· 在一个真正的浏览器上运行,并支持JavaScript的

· 速度比Internet Explorer的驱动程序快

缺点

· 比HtmlUnit的驱动程序慢

修改火狐简介

假设你想要修改的用户代理字符串(如上述),但你已经有了一个欺骗Firefox的配置文件,它包含许多有用的扩展。有两种方式获得此配置文件。假设使用Firefox的配置文件管理器(火狐 ProfileManager),已创建配置:

另外,如果配置文件尚未在Firefox注册:

当我们正在开发firefox 启动的特性,我们能够正常使用。

正如我们在Firefox Driver,开发功能,我们能够使用。例如,直到我们感觉本机事件为Linux上的Firefox是稳定的,他们是默认情况下禁用。要启用它们:

            
              profile =
              
                 webdriver.FirefoxProfile()

profile.native_events_enabled 
              
              =
              
                 True

driver 
              
              = webdriver.Firefox(profile)
            
          

 

信息

请参阅火狐部分维基页面的最新最先进的信息。

 

 

Internet Explorer Driver


 

该驱动程序控制.dll,因而只适用于Windows操作系统。每个selenium释放它的核心功能在xp下测试IE版本6,7和8,在Windows7下测试IE 9。

用法

            
              driver = webdriver.Ie()
            
          

 

 

优点

· 运行在一个真正的浏览器支持JavaScript与最终用户看到的所有的行为一致

缺点

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

· 相对缓慢(尽管仍然是相当快速的)

· 本身不支持XPath的大多数版本。自动注入,这是明显慢于其他浏览器和进行比较时,在同一浏览器的CSS选择器变慢。

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

· CSS选择器在IE 8和9是本地的,但这些浏览器不完全支持CSS3

信息

维基页面的最先进的最新信息,请参阅Internet Explorer的部分。请特别注意所需的配置部分。

 

 

Chrome驱动


 

Chrome驱动程序维护/支持Chrome 项目本身。webdriver的工作与Chrome通过的chromedriver二进制(Chrome项目的下载页面上找到)。你需要有两个chromedriver和安装一个版本的Chrome浏览器。为了webdriver的自动找到,chromedriver需要要放在系统的路径上。Chrome浏览器本身由chromedriver在默认安装路径找到。这些都可以通过环境变量覆盖。 有关更多信息,请参阅维基。

用法

            
              driver = webdriver.Chrome()
            
          

 

 

优点

· 在一个真正的浏览器上运行,并支持JavaScript的

· 因为Chrome是基于Webkit的浏览器,Chrome Driver会允许您验证您的网站在Safari的测试效果。需要注意的是,因为浏览器使用其自己的V8 JavaScript引擎,而不是Safari浏览器的Nitro引擎,JavaScript的执行可能会有所不同。

缺点

· 比HtmlUnit的驱动程序慢

· 

信息

最先进的最新信息,请参阅我们的wiki。更多信息,也可以找到下载页面

 

获取与Chrome驱动程序运行

铬驱动程序可执行文件下载 ,并按照其他的wiki页面上的说明

Opera Driver

见歌剧院驱动器在上使用Opera驱动程序的信息的selenium维基wiki文章。

iPhone Driver

查看iPhone的驱动selenium维基上使用Mac的iOS驱动程序的信息,wiki文章。

Android Driver

查看Android的驱动程序 硒selenium维基采用了Android驱动程序的信息,wiki文章。

 

 

混合使用webdriver和RC技术


 

Webdriver替换selenium RC 

webdriver的Java版本的selenium RC API提供了一种实现。这意味着,你可以使用Selenium-RC API和使用底层webdriver的技术。这主要是用于向后兼容。它允许那些使用selenium RC API的用户使用webdriver覆盖现有的测试套件。它提供帮助缓解迁移到selenium webdriver。此外,允许一个人使用这两个API,在相同的测试代码。

Selenium webdriver的使用是这样的:

优点

· webdriver的和selenium的API允许并排存在

· webdriver的迁移管理机制提供了一个简单的Selenium RC API

· 不需要独立的Selenium RC服务器的运行

缺点

· 不能支持每一个方法

· 更多先进的selenium使用(using “browserbot” or other built-in JavaScript methods from Selenium Core)可能无法正常工作

· 由于底层实现差异,有些方法可能会比较慢

备份webdriver与selenium

webdriver的尽可能多兼容selenium RC对浏览器的支持,同时仍然提供支持使用webdriver的API,所以为了您可以利用SeleneseCommandExecutor

Safari是支持这种方式,用下面的代码(确保禁用弹出窗口拦截功能):

这种方法目前有一些主要限制,尤其是findElements并不如预期般运作。此外,繁重的驱动浏览器,因为我们使用的是selenium 的核心,你的JavaScript沙箱限制。

运行独立Selenium服务器使用RemoteDrivers 

从selenium 的下载页下载服务器独立 .jar和可选的IEDriverServer。如果您打算使用Chrome,从Google Code上下载。

拆开IEDriverServer和(或)chromedriver,并把它们在$ PATH /%PATH% - Selenium服务器上的一个目录,这是应该能够IE / Chrome的处理请求,而无需额外的修改。

启动服务器的命令行

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

 

 

如果你想使用原生的事件功能,表明在命令行上的选项

            
              Dwebdriver.enable.native.events = 1
            
          

 

 

对于其他命令行选项,执行

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

 

 

为了正常工作,应该允许以下端口传入的TCP连接:​​4444,7054-5(or twice as many ports as the number of concurrent instances you plan to run)。在Windows下,你可能需要以及疏通各种应用。

 

 

 


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论