1分钟了解一个测开小知识:
selenium定位web元素的方法(三)Tag:
咱们先看下Tag,在HTML里是哪一部分
每个tag代表着不同的意思,先不考虑含义,但是能知道的是,每个段落都包含并且可能不一致。
对于需要批处理的数据,一般有tag。例如:捕捉表单下的每个数据、验证统计表正确性、等等,需要对多个数据进行操作。使用Xpath就很麻烦,需要逐个定位元素,然后取。
演示一下:
测试场景是,或者这个表单下的数据,如果数值为2,则返回对应的名称。
如果使用Xpath,每行数据都需要定位2条Xpath信息,
一条是名称的xpath://*[@id="instances"]/tbody/tr[15]/td[1]/b
一条是数值的xpath://*[@id="instances"]/tbody/tr[15]/td[3]
列表有多少行数据,就需要定位多少行,为了把体力活变成脑力活。就需要引用tag。
Tag使用的方式比Xpath定位多一个找父节点的操作。
从html结构看,就是找能够判断出来的上级
通过html结构,找到上级节点。由于一般获取的是表单,即找到tag名称为:table的节点
代码如下:table = driver.find_element_by_Xpath('//*[@id="instances"]')
然后再父节点下,寻找所需要数据的tag名称
找到行的tag:tr;列的tag:td
行的代码:lines = table.find_elements_by_tag_name('tr')
注意,这里不再使用driver、而是使用table,理解为,将定位数据的范围限制在列表下
最后捕捉列数据:
lists = lines[0].find_elements_by_tag_name('td')
最后获取名称数据:
name = lists[0].text
获取数量内容:
number = lists[2].text
部分源码:
table = driver.find_element_by_xpath('//*[@id="instances"]') # 捕捉父节点,即表单
lines = table.find_elements_by_tag_name('tr') # 根据表单找到所有行
for num, data in enumerate(lines): # 添加循环,遍历所有找到的行
lists = lines[num].find_elements_by_tag_name('td') # 每行中找到所有列的数据
name = lists[0].text # 第一列是名称列,捕捉名称列的描述信息
number = lists[2].text # 第三列是数量列,捕捉数量列的描述信息
print(name, number) # 输出名称,数据
输出的内容举例:
MSP-GATEWAY (1)
MSP-MASTER (1)
MSP-MONITOR-UI (1)
MSP-REGISTRY (1)