Python Selenium 部分API详细使用方法(一)

栏目: 编程语言 · Python · 发布时间: 6年前

内容简介:Python Selenium 部分API详细使用方法(一)

*********************************************************************************************

一、浏览器操作

1、浏览器最大化

driver.maximize_window() #将浏览器最大化显示

2、设置浏览器宽、高

driver.set_window_size(480, 800)#设置浏览器宽480、高800显示

3、控制浏览器前进、后退

driver.back()#浏览器后退
driver.forward()#浏览器前进

*********************************************************************************************

二、简单对象的定位

webdriver 提供了一系列的元素定位方法,常用的有以下几种:

  •  id
  •  name
  •  class name
  •  tag name
  •  link text
  •  partial link text
  •  xpath
  •  css selector

分别对应python webdriver 中的方法为:

  • find_element_by_id()
  • find_element_by_name()
  • find_element_by_class_name()
  • find_element_by_tag_name()
  • find_element_by_link_text()
  • find_element_by_partial_link_text()
  • find_element_by_xpath()
  • find_element_by_css_selector()

    1、id 和name 定位

    id 和name 是我们最常用的定位方式,因为大多数元素都有这两个属性,而且在对控件的id 和name
    命名时一般使其有意义也会取不同的名字。通过这两个属性使我们找一个页面上的属性变得相当容易。

    比如:

    #id=”gs_htif0”
    find_element_by_id("gs_htif0")
    #name=”btnK”
    find_element_by_name("btnK")

    2、tag name 和class name 定位

    比如:

    #<div id="searchform" class="jhp_big" style="margin-top:-2px">
    #<form id="tsf" onsubmit="return name="f" method="GET" action="/search">
    find_element_by_class_name("jhp_big")
    find_element_by_tag_name("div")

    tag name 定位应该是所有定位方式中最不靠谱的一种了,因为在一个页面中具有相同tag name 的元
    素极其容易出现。

    3、link text 与partial link text 定位

    有时候需要操作的元素是一个文字链接,那么我们可以通过link text 或partial link text 进行元素
    定位。比如:

    #<a href="http://news.baidu.com" name="tj_news">新闻</a>
    #<a href="http://tieba.baidu.com" name="tj_tieba">贴吧</a>
    #<a href="http://zhidao.baidu.com" name="tj_zhidao">一个很长的文字连接</a>
    
    #通过link text 定位元素:
    find_element_by_link_text("新闻")
    find_element_by_link_text("贴吧")
    find_element_by_link_text("一个很长的文字连接")
    
    #通partial link text 也可以定位到上面几个元素:
    find_element_by_partial_link_text("新")
    find_element_by_partial_link_text("吧")
    find_element_by_partial_link_text("一个很长的")

    当一个文字连接很长时,我们可以只取其中的一部分,只要取的部分可以唯一标识元素。一般一个页
    面上不会出现相同的文件链接,通过文字链接来定位元素也是一种简单有效的定位方式。

    4、XPath 定位

    XPath 是一种在XML 文档中定位元素的语言。因为HTML 可以看做XML 的一种实现,所以selenium 用
    户可是使用这种强大语言在web 应用中定位元素。

    以下面一段html代码为例:

    <html class="w3c">
    <body>
         <div class="page-wrap">
         <div id="hd" name="q">
             <form target="_self" action="http://www.so.com/s">
                  <span id="input-container">
                        <input id="input" type="text" x-webkit-speech="" autocomplete="off" suggestwidth="501px" >

    (1)使用绝对路径定位:

    当我们所要定位的元素很难找到合适的方式时,都可以通这种绝对路径的方式位,缺点是当元素在很
    多级目录下时,我们不得不要写很长的路径,而且这种方式难以阅读和维护。

    find_element_by_xpath("/html/body/div[2]/form/span/input")

    (2)使用相对路径定位:

    find_element_by_xpath("//input[@id=’input’]") #通过自身的id 属性定位
    find_element_by_xpath("//span[@id=’input-container’]/input") #通过上一级目录的id 属性定位
    find_element_by_xpath("//div[@id=’hd’]/form/span/input") #通过上三级目录的id 属性定位
    find_element_by_xpath("//div[@name=’q’]/form/span/input")#通过上三级目录的name 属性定位

    通过上面的例子,我们可以看到XPath 的定位方式非常灵活和强大的,XPath 可以做布尔逻辑运算,例如://div[@id=’hd’ or @name=’q’]。

    当然,它的缺陷也非常明显:

    1、性能差,定位元素的性能要比其它大多数方式差;

    2、不够健壮,XPath会随着页面元素布局的改变而改变;

    3. 兼容性不好,在不同的浏览器下对XPath 的实现是不一样的。

     

    下面插播一下xpath的知识:

    (1)路径表达式:

    表达式 描述
    nodename 选取此节点的所有子节点。
    / 从根节点选取。
    // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
    . 选取当前节点。
    .. 选取当前节点的父节点。
    @ 选取属性。

    实例

    在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:

    路径表达式 结果
    bookstore 选取 bookstore 元素的所有子节点。
    /bookstore

    选取根元素 bookstore。

    注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!

    bookstore/book 选取属于 bookstore 的子元素的所有 book 元素。
    //book 选取所有 book 子元素,而不管它们在文档中的位置。
    bookstore//book 选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
    //@lang 选取名为 lang 的所有属性。

    实例

    在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:

    路径表达式 结果
    /bookstore/book[1] 选取属于 bookstore 子元素的第一个 book 元素。
    /bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素。
    /bookstore/book[last()-1] 选取属于 bookstore 子元素的倒数第二个 book 元素。
    /bookstore/book[position()<3] 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
    //title[@lang] 选取所有拥有名为 lang 的属性的 title 元素。
    //title[@lang='eng'] 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
    /bookstore/book[price>35.00] 选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
    /bookstore/book[price>35.00]/title 选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。

    (2)选取未知节点

    XPath 通配符可用来选取未知的 XML 元素。

    通配符 描述
    * 匹配任何元素节点。
    @* 匹配任何属性节点。
    node() 匹配任何类型的节点。

    实例

    在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

    路径表达式 结果
    /bookstore/* 选取 bookstore 元素的所有子元素。
    //* 选取文档中的所有元素。
    //title[@*] 选取所有带有属性的 title 元素。

     

    5、CSS 定位

    CSS(Cascading Style Sheets)是一种语言,它被用来描述HTML 和XML 文档的表现。CSS 使用选择器来为页面元素绑定属性。这些选择器可以被selenium 用作另外的定位策略。CSS 可以比较灵活选择控件的任意属性,一般情况下定位速度要比XPath 快,但对于初学者来说比较难以学习使用,下面我们就详细的介绍CSS 的语法与使用:

    Python Selenium  部分API详细使用方法(一)

    例如下面一段代码:

    <div class="formdiv">
    <form name="fnfn">
    <input name="username" type="text"></input>
    <input name="password" type="text"></input>
    <input name="continue" type="button"></input>
    <input name="cancel" type="button"></input>
    <input value="SYS123456" name="vid" type="text">
    <input value="ks10cf6d6" name="cid" type="text">
    </form>
    <div class="subdiv">
    <ul id="recordlist">
    <p>Heading</p>
    <li>Cat</li>
    <li>Dog</li>
    <li>Car</li>
    <li>Goat</li>
    </ul>
    </div>
    </div>

    通过CSS 语法进行匹配的实例:

    Python Selenium  部分API详细使用方法(一)

    关于自动化的定位问题:
    自动化测试的元素定位一直是困扰自动化测试新手的一个障碍,因为我们在自动化实施过程中会碰到
    各式各样的对象元素。虽然XPath 和CSS 可以定位到复杂且比较难定位的元素,但相比较用id 和name 来
    说增加了维护成本和学习成本,相比较来说id/name 的定位方式更直观和可维护,有新的成员加入的自动
    化时也增加了人员的学习成本。所以,测试人员在实施自动化测试时一定要做好沟通,规范前端开发人员
    对元素添加id/name 属性,或者自己有修改HTML 代码的权限。

*********************************************************************************************


以上所述就是小编给大家介绍的《Python Selenium 部分API详细使用方法(一)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

七周七语言

七周七语言

Bruce A.Tate / 巨成、戴玮、白明 / 人民邮电出版社 / 2012-5-8 / 59.00元

内容简介: 从计算机发展史早期的Cobol、Fortran到后来的C、Java,编程语言的家族不断壮大。除了这些广为人知的语言外,还涌现了Erlang、Ruby等后起之秀,它们虽被喻为小众语言,但因其独特性也吸引了为数不少的追随者。 Bruce A. Tate是软件行业的一名老兵,他有一个宏伟目标:用一本书的篇幅切中要害地探索七种不同的语言。本书就是他的成果。书中介绍了Ruby、Io、......一起来看看 《七周七语言》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试