zoukankan      html  css  js  c++  java
  • selenium元素定位

    注:这里是基于Python3的UI自动化测试

    一、单个和多个元素定位

      selenium自动化测试中,单个和多个定位方式都是根据属性 ID、NAME、CLASS_NAME、TAG_NAME、CSS_SELECTOR、XPATH、LINK_TEXT、PARTIAL_LINK_TEXT 来定位。如下:

    单元素定位:按F12进入Web控制台可以查看到

      driver.find_element_by_id('kw')
      driver.find_element_by_name('wd')
      driver.find_element_by_class_name('s_ipt')
      driver.find_elements_by_tag_name('input') #返回符合条件得第一个标签
      driver.find_element_by_xpath('//*[@id="id"]')   
      driver.find_element_by_link_text(u'新闻') #a标签,用于超链接处理,这里是“新闻”链接   
      driver.find_element_by_partial_link_text(u'新') #包含“新”字的链接     
      driver.find_element_by_css_selector('#kw')     #定位到元素属性后,鼠标右击属性,Copy-Copy selector选项获取 

    多元素定位:当定位多个元素后,结果以列表的形式呈现,然后可以按照列表的索引来定位到具体的位置

    如:在百度首页中,以TAG_NAME元素属性定位百度输入框,在代码中可以发现不仅仅在百度搜索输入框有input标签。

    <form id="form" name="f" action="/s" class="fm">
    	<input type="hidden" name="ie" value="utf-8">
    	<input type="hidden" name="f" value="8">
    	<input type="hidden" name="rsv_bp" value="1">
    	<input type="hidden" name="rsv_idx" value="1">
    	<input type="hidden" name="ch" value="">
    	<input type="hidden" name="tn" value="93308895_hao_pg">
    	<input type="hidden" name="bar" value="">
    	<span class="bg s_ipt_wr quickdelete-wrap">
    		<span class="soutu-btn"></span>
    		<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
    		<a href="javascript:;" id="quickdelete" title="清空" class="quickdelete" style="top: 0px; right: 0px; display: none;"></a>
    	</span>
    	......	
    </form> 

    在Firefox浏览器中,获取百度首页input标签,查看属性,注意elements是复数的。

        tag_names = driver.find_elements_by_tag_name('input')
        for tag_name in tag_names:
            print(tag_name)
        print(type(tag_names))

     输出结果略。使用以上方法可得,input的数据类型是 list,百度搜索输入框是在 input 标签中的第 8 位,那么索引是第 7 个。

      driver.find_elements_by_tag_name('input')[7].send_keys('python3')

    也可以这样:

        tag_names = driver.find_elements_by_tag_name('input')
        tag_names[7].send_keys('python3')

     二、iframe 元素定位(这里写的简单)

      在自动化测试中,如果无法定位到一个元素,很大可能是定位的元素在 iframe 框架中。iframe 对象代表一个 HTML 的内联框架,在 HTML 中 iframe 每出现一次,一个 iframe 对象就会被创建。

    1、处理未嵌套的 iframe 

    方法:首先需要进入到 iframe 框架里,再定位 iframe 框架中的元素。

    进入 iframe 框架的方式有两种:根据 ID 和 索引的方式。

    如,要计入的 iframe ID 是text ,对应的索引是0:

        driver.switch_to.frame('text') #根据iframe的ID进入到iframe框架
        driver.switch_to.frame(0)      #根据索引进入到iframe框架
    

    2、处理嵌套的 iframe

    方法:嵌套 iframe 简单地说就是 iframe 框架里又嵌套了多级 iframe 框架,如果要定位到子级里的元素,需要一级级进入再定位元素。

    如,有二层嵌套,第一层 ID 是 parent,第二层 ID 是 son:

        driver.switch_to.frame('parent')   #根据ID进入到第一层iframe框架
        driver.switch_to.frame('son')      #根据ID进入到第二层iframe框架
        driver.switch_to.default_content() #切出
    

      

    谢谢查看,笔记继续完善!

    2019-10-06

  • 相关阅读:
    elasticsearch7.6.2实战(1)-单机快速部署
    greenplum数据库常用操作
    kafka集群搭建及结合springboot使用
    msyql主从库配置
    文本相似性算法实现(二)-分组及分句热度统计
    一点区块链资料
    使用.Net Core实现的一个图形验证码
    python中的collections.namedtuple
    Linux中的定时任务at、crontab
    es3中使用es6/7的字符串扩展
  • 原文地址:https://www.cnblogs.com/yuntimer/p/11624428.html
Copyright © 2011-2022 走看看