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

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

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

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

pqwbnv8z1#

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

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

lmyy7pcs2#

看到蓝色按钮有这个html吗

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

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

  1. //a[@class='button']

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

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


对于第二个按钮:-

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

等等
使用find_元素:

  1. buttons = driver.find_elements(By.XPATH, "//a[@class='button']")
  2. buttons[0].click() # to click on first button
  3. buttons[1].click() # to click on second button
展开查看全部
m3eecexj

m3eecexj3#

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

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

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

  1. //a[@class='button']

相关问题