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" οnsubmit="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 的语法与使用:

    例如下面一段代码:

    <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 语法进行匹配的实例:

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

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

转载于:https://my.oschina.net/u/3222944/blog/1563642

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值