元素的定位应该是自动化测试的核心,要想操作一个元素,首先应该识别这个元素。

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

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

案例:打开百度首页,在搜索框自动输入“Selenium”关键词,然后点击搜索按钮,查看搜索页面

在此之前,首先使用前端工具查看百度首页的元素,可以查看到各种标签对、标签属性、标签对之间的文本数据以及层级关系等,如下所示:

<span class="bg s_ipt_wr quickdelete-wrap">
    <span class="soutu-btn"></span>
    <input id="kw" class="s_ipt" autocomplete="off" maxlength="255" value="" name="wd">
    <a id="quickdelete" class="quickdelete" href="javascript:;" title="清空" style="top: 0px; right: 0px; display: none;"></a>
</span>
<span class="bg s_btn_wr">
    <input id="su" class="bg s_btn" type="submit" value="百度一下">
</span>

 id定位

from selenium import webdriver
from time import sleep

driver=webdriver.Firefox()
driver.get("http://www.baidu.com")

driver.find_element_by_id("kw").send_keys("selenium")
sleep(2)

driver.find_element_by_id("su").click()
sleep(3)

driver.quit()

HTML规定id属性在HTML文档中必须是唯一的,Webdriver提供的id定位方法就是通过元素的id属性来查找元素。


 name定位

driver.find_element_by_name("wd").send_keys("selenium")

HTML规定name来置顶元素的名称,name的属性值,在当前页面中可以不唯一。


calss定位

driver.find_element_by_class_name("s_ipt").send_keys("selenium")

HTML规定class来置顶元素的类名,其用法与id、name类似。


tag定位

案例:打开博客园首页页面,在找找看的搜索输入框输入关键词“selenium”,休息3秒后,在Google前面的搜索框输入“selenium”关键词

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.get("https://www.cnblogs.com")

#定位标签名为input的元素,默认是第一个
driver.find_element_by_tag_name("input").send_keys("Selenium")
sleep(3)
#获取页面所有标签名为“input”的标签
driver.find_elements_by_tag_name("input")[1].send_keys("Selenium")
sleep(3)

driver.quit()

HTML的本质就是通过tag来定义实现不同的功能,每一个元素本质上也是一个tag。因为一个tag往往用来定义一类功能,所以通过tag识别某个元素的概率很低,很难通过标签tag name去区分不同的元素


 link定位

案例:打开百度首页的新闻页面

此时,使用前端工具查看到的页面代码如下:

<div id="u1">
    <a class="mnav" name="tj_trnews" href="http://news.baidu.com">新闻</a>
    <a class="mnav" name="tj_trhao123" href="http://www.hao123.com">hao123</a>
    <a class="mnav" name="tj_trmap" href="http://map.baidu.com">地图</a>
    <a class="mnav" name="tj_trvideo" href="http://v.baidu.com">视频</a>
    <a class="mnav" name="tj_trtieba" href="http://tieba.baidu.com">贴吧</a>
    <a class="mnav" name="tj_trxueshu" href="http://xueshu.baidu.com">学术</a>
    <a class="lb" onclick="return false;" name="tj_login" href="https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F">登录</a>
    <a class="pf" name="tj_settingicon" href="http://www.baidu.com/gaoji/preferences.html">设置</a>
    <a class="bri" style="display: block;" name="tj_briicon" href="http://www.baidu.com/more/">更多产品</a>
</div>

Python代码:

driver.find_element_by_link_text("新闻").click()

find_element_by_link_text()方法通过元素标签对之间的文本信息来定位元素


 Partial link定位

driver.find_element_by_partial_link_text('党的十九大精神').click()

partial link定位是对link定位的一种补充,有些文本链接会比较长,这个时候我们可以取文本链接的一部分定位,只要这一部分信息可以唯一的标识这个链接

 

posted on 2017-12-25 14:29  NancyRM  阅读(243)  评论(0编辑  收藏  举报