webdriver中html节点的查找、定位

from selenium import  webdriver
from selenium.webdriver.common.action_chains import ActionChains
import os, time

file_name = "file://" + os.path.abspath("find_elements.html")
driver = webdriver.Firefox()
driver.get(file_name)

print("根据ID查找元素")
msg = driver.find_element_by_id("divHello").text
print("find_element_by_id, msg =", msg)

# 多个相同的id是不好的设计。
print("根据ID查找元素 -- id相同")
ids = driver.find_elements_by_id("multiDiv1")
for id in ids:
    print("find_elements_by_id, test =", id.text)

print("根据名称查找name")
msg = driver.find_element_by_name("divByName").text
print("find_element_by_name, msg =", msg)

msg = driver.find_element_by_name("divByName2").text
print("find_element_by_name, 嵌套 msg =", msg)

print("根据class获取界面上的元素")
ids = driver.find_elements_by_class_name("span3")
for id in ids:
    print("find_elements_by_class_name, level =", id.get_attribute("level"))

print("根据html标签的文字查找")
msg = driver.find_element_by_link_text("快速购买").text
print("find_element_by_link_text, msg =", msg)
msg = driver.find_element_by_partial_link_text("速购").text
print("find_element_by_partial_link_text, msg =", msg)

print("根据xpath选择标签")
# xpath 基本路径表达法
# nodename 选取此节点的所有子节点。
#/ 从根节点选取。
#//    从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
#. 选取当前节点。
#..    选取当前节点的父节点。
#@ 选取属性。

divChild = driver.find_element_by_id("dropDown")
print("find_element_by_id, class for dropDown =", divChild.get_attribute("class"))

divs = driver.find_elements_by_xpath("/html/body/div")
print("选取根节点下全部的div")
for div in divs:
    print("body下全部div的子节点, Level =", div.get_attribute("level"))

divs = driver.find_elements_by_xpath("/div")
if divs.__len__() == 0:
    print("/节点下的div没有找到")
for div in divs:
    print("body下全部div的子节点(包括孙子级别的)Level, level =", div.get_attribute("level"))
print("")

print("根节点的确认")
print("根节点下的div")
divs = driver.find_elements_by_xpath("div")
if divs.__len__() == 0:
    print("根节点下没有div节点。")
divs = driver.find_elements_by_xpath("html")
if divs.__len__() != 0:
    print("根节点下有html节点")

print("从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置")
divs = driver.find_elements_by_xpath("//div")
if divs.__len__() == 0:
    print("webdriver默认的根节点是什么?")
for div in divs:
    print("body下全部div的子节点(不管层级的)Level =", div.get_attribute("level"))

print()
print("找到dropDown的节点,通过divChild找到其他节点")
divChild = driver.find_element_by_id("dropDown") # 找到dropDown的节点.
divs = divChild.find_elements_by_xpath("/html/body/div")      # 从跟节点开始找。
for div in divs:
    print("body下全部div的子节点, Level =", div.get_attribute("level"))

id = divChild.find_element_by_xpath("..")
print("divChild的父节点, desc =", id.get_attribute("desc"))

print("")
print("通过divChild找到body下面的第一个div节点。")
id = divChild.find_element_by_xpath("../../../div[1]")  # 第一个子节点只可以使用1,不能使用first()
print("body的第一个子节点 div level =", id.get_attribute("level"))
id = divChild.find_element_by_xpath("../../../div[last()]")
print("body的最后一个子节点 div level =", id.get_attribute("level"))

print("body的前四个div节点:")
ids = divChild.find_elements_by_xpath("../../../div[position()<=4]")
for div in ids:
    print("前四个节点, Level =", div.get_attribute("level"))

#* 匹配任何元素节点。
#@*    匹配任何属性节点。
#node()    匹配任何类型的节点。
print()
print("head节点下的所有子节点")
ids = driver.find_elements_by_xpath("/html/head/*")
for id in ids:
    print("任意节点, tag_name =", id.tag_name)

print("有tabindex的全部节点。")
ids = driver.find_elements_by_xpath("//*[@tabindex]")
for id in ids:
    print("tabindex, tag_name =", id.tag_name, " =", id.text)

print("通过|同事选取多个节点。")
ids = driver.find_elements_by_xpath("/html/head/* | //div[@class='dropdown']/*[position()>1]")
#ids = driver.find_elements_by_xpath("//div[@class='dropdown']/*[1]")
for id in ids:
    print("任意节点, tag_name =", id.tag_name, ", 属性role =", id.get_attribute("role"))

driver.quit()
 
********后面是使用到的html文件********
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    <title>层级定位</title>
</head>
<body>
    <h3>Level locate</h3>

    <div class="span3" level="first">
        <div class="well">
            <div class="dropdown">
                <a class="dropdown-toggle" data-toggle="dropdown" href="#">Link1</a>
                <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel" id="dropdown1">
                    <li><a tabindex="-1" href="#">Action</a></li>
                    <li><a tabindex="-1" href="#">Another action</a></li>
                    <li><a tabindex="-1" href="#">Something else here</a></li>
                    <li class="divider"></li>
                    <li><a tabindex="-1" href="#">Separated link</a></li>
                </ul>
            </div>
        </div>
    </div>
    <div class="span3" level="second">
        <div class="well" desc="dropDwon的父节点">
            <div class="dropdown" id="dropDown" level="second的孙子。。。">
                <a class="dropdown-toggle" data-toggle="dropdown" href="#">Link2</a>
                <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
                    <li><a tabindex="-1" href="#">Action</a></li>
                    <li><a tabindex="-1" href="#">Another action</a></li>
                    <li><a tabindex="-1" href="#">Something else here</a></li>
                    <li class="divider"></li>
                    <li><a tabindex="-1" href="#">Separated link</a></li>
                </ul>
            </div>
        </div>
    </div>

    <div id="divHello">你好!</div>
    <div id="multiDiv1">multiDiv1</div>
    <div id="multiDiv1">multiDiv2</div>
    <div id="multiDiv1">multiDiv3</div>
    <div name="divByName">根据名称查找</div>
    <div><div name="divByName2">by name, 嵌套在其他元素里面。</div></div>
    <div level="ninth"><div><a href="">快速购买</a> </div></div>
    <span level="900000"></span>
</body>
</html>

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值