python—使绝对xpath在测试中更加健壮

ghhaqwfi  于 2021-09-29  发布在  Java
关注(0)|答案(3)|浏览(228)

我是测试自动化领域的新手,一直在自学。
在internet挑战dom页面上,我使用绝对xpath找到了蓝色按钮,这是我唯一能想到的找到它的方法。当页面刷新时,其他每个选择器似乎都会动态更改。
在这种情况下,有没有办法使此选择更加可靠?从谷歌搜索来看,这似乎是一种在网页上查找内容的脆弱方法。
https://the-internet.herokuapp.com/challenging_dom

''' #Test blue button on page, repeated 5 times and text displayed checked against options. 
@pytest.mark.repeat(5)
def test_2():
    elem1 = b.find_element(By.XPATH, 'html/body/div[2]/div/div/div/div/div[1]/a[1]')
    a=(elem1.text)`enter code here`
    elem1.click()
    assert a in Names
    print (a)'''
pqwbnv8z

pqwbnv8z1#

此元素的正确且唯一的xpath可以是

//a[@class='button']
lmyy7pcs

lmyy7pcs2#

看到蓝色按钮有这个html吗

<a id="240aa520-d0f5-0139-b953-067df9ace5fa" href="" class="button">bar</a>

很明显 id 正在生成 dynamically . href 没有 value . classbuttontextbar (但文本不断变化,所以我们也不考虑文本)
因此,基于类,我们可以构造一个 xpath :

//a[@class='button']

现在的问题是dom中有多个条目,对吗?
因此,在这种情况下,我们剩下两个选项:-
Xpath index find_elements 使用xpath索引:
第一个按钮:-

(//a[@class='button'])[1]


对于第二个按钮:-

(//a[@class='button'])[2]

等等
使用find_元素:

buttons = driver.find_elements(By.XPATH, "//a[@class='button']")

 buttons[0].click()  # to click on first button

 buttons[1].click()  # to click on second button
m3eecexj

m3eecexj3#

由于三个按钮具有动态id值,所以我只是尝试检查id的静态部分,这对于所有按钮都是通用的,我们根据索引得到所需的按钮。

((//a[contains(@id,'067df9ace5fa')])[1])

按钮的文本正在更改,但属性保持不变,因此您可以在下面进行检查

//a[@class='button']

相关问题