html如下:
<div class="flex" style="width: 265px;">
<div class="red-block" style="border: 1px solid rgb(224, 41, 41);">
<div class="grade-img"><img src="/xxxred-block.png" alt=""></div>
<div class="grade" id="grade-one" style="font-size:16px; top:-16px; left:7px;"code="A类">A级</div>
<img class="red-check" src="/xxx/red-check.png" alt="">
</div>
<div class="orange-block" style="border: 1px solid rgb(242, 147, 24);">
<div class="grade-img"><img src="/xxx/orange-block.png" alt=""></div>
<div class="grade" id="grade-two" style="font-size:16px; top:-16px; left:7px;"code="B类">B级</div>
<img class="orange-check" src="/xxx/orange-check.png" alt="">
</div>
<div class="yellow-block" style="border: 1px solid rgb(214, 204, 39); display: inline-block;">
<div class="grade-img"><img src="/xxx/yellow-block.png" alt=""></div>
<div class="grade" id="grade-three" style="font-size:16px;top:-16px; left:7px;"code="C类">C级</div>
<img class="yellow-check" src="/xxx/yellow-check.png" alt="" style="display: inline-block;">
</div>
</div>
python 使用selenium的xpath定位时,需要把参数A级,B级,C级这3个作为测试用例的一个字段分别输入,那就需要捕捉这3个值所在位置才能传入,那么怎么才能捕获呢?就需要来遍历以上这段代码,把这个文本内容作为参数传入进来。
因为这3个参数属于同一个条件中不同的选项,有时候选择A级,有时候选择B级,有时候选择C级,根据参数传入进来,就需要遍历这3个位置
如何遍历并点击以上html中的文本为A级、B级、C级的div?
python代码如下:
def choose_level(self, _level):
_by = 'xpath'
# 整个等级区域块
_all_level_area_loc = '//div[contains(@class, "flex")]/div'
# 单个等级块
_single_level_area_loc = _all_level_area_loc + '[{}]'
# 输入等级的区域
_level_loc = '//div[contains(@class, "flex")]/div/div[text()="{}"]'
_level_area = self.find_elements(_by, _all_level_area_loc, 0.5, False)
if _level:
for n in range(1, len(_level_area) + 1):
self.click_element(_by, _single_level_area_loc.format(n))
for i in _severity.split(','):
_level = _level_loc.format(i)
self.click_element(_by, _level, False)
# 整个等级区域块
_all_level_area_loc = '//div[contains(@class, "flex")]/div'
# 单个等级块
_single_level_area_loc = _all_level_area_loc + '[{}]'
整个等级块包含3个单个等级块,但是等级块中除了文本不一样,其他都一样的,通过在整个等级区域加上下标,举个例子:
xpath1 = (//div/div)[1] :表示//div/div的第1个元素
xpath2 = (//div/div)[2] :表示//div/div的第2个元素
…
如下(将不同的文本内容(A级,B级,C级)抠出来通过传参传进来):
_single_level_area_loc = _all_level_area_loc + '[{}]'
通过找到整个等级块对象的长度,可以来标记这个下标、然后通过传参就能找到
使用时: _single_level_area = _single_level_area .format([0])
即:
_single_level_area[0]即为: <div class="grade" id="grade-one" style="font-size:16px; top:-16px; left:7px;"code="A类">A级</div>
_single_level_area[1]即为: <div class="grade" id="grade-one" style="font-size:16px; top:-16px; left:7px;"code="A类">B级</div>
_single_level_area[2]即为: <div class="grade" id="grade-one" style="font-size:16px; top:-16px; left:7px;"code="A类">C级</div>