gpt4 book ai didi

java - 在使用 Selenium 进行测试自动化期间检查元素时,某些网页中的元素 "id"会发生变化(不是静态的)。如何处理这种情况?

转载 作者:行者123 更新时间:2023-11-30 10:04:37 24 4
gpt4 key购买 nike

我正在尝试使用带有 Chrome 驱动程序的 SELENIUM 中的测试自动化来捕获下拉菜单字段。

为什么使用 Chrome 浏览器时不时检查元素时,某些网页中的元素“id”会发生变化?如何保持“id”的静态,不改变?

我遵循的步骤:

  1. 当我检查网页中的元素时,特定的下拉菜单将其“id”显示为:id="combo-1782-inputEl"

HTML:

<input id="combo-1782-inputEl**" type="text" class="x-form-field x-form-required-field x-form-text x-trigger-noedit x-form-focus x-field-form-focus x-field-default-form-focus" autocomplete="off" name="type" readonly="readonly" aria-invalid="false" data-errorqtip="" style="width: 135px;">

id 通过在普通 chrome 浏览器中检查网页观察到:

-

  1. 然后我在我的 java 代码(自动化脚本)中使用上面的 id,如下所示:

    driver.findElement(By.id("combo-1782-inputEl")).click();

  2. 当我运行测试时 > google chrome 浏览器自动打开 > 测试成功,直到遇到上面这行代码。

  3. 但是,当遇到上面的代码行时,测试失败并抛出以下异常:

    • 类 org.openqa.selenium.NoSuchElementException *
  4. 然后我检查了自动测试软件打开(控制)的chrome网页中相同的下拉菜单项,发现“id”与之前在步骤1中提到的id不同。本例中的“id”是:“combo-1781-inputEl

id在自动化软件控制的chrome浏览器中查看网页观察到:

-

可以看到,id中间的数字从1减少了。(1782-1 = 1781)

在同一网页的其他下拉菜单项中发现了同样的问题。

这个问题的原因是什么?我怎样才能克服这种情况?请帮忙。 :)

附言当我在代码中使用“combo-1781-inputEl”(第 5 步中的“id”)时,测试成功通过。

driver.findElement(By.id("combo-1782-inputEl")).click();  //Test: failed
driver.findElement(By.id("combo-1781-inputEl")).click(); //Test: passed

当我使用在第 1 步中获得的“id”时,我希望通过在不受自动化软件控制的普通 chrome 浏览器中检查网页时通过测试。

最佳答案

为了向您提供最佳答案,我需要查看该网页的一段 HTML 代码,足以让我看到其他属性。当您拥有动态 ID 时,您有两种选择:

选项 1:使用一个 xpath,它使用常量 ID 的一部分,即:

//*[starts-with(@id, 'combo-')]

可能会成功,但前提是没有其他类似的 ID。

或者也许:

//*[开始于(@id, 'combo-') 结束于(@id, '-inputEl')]

但这可能仍然不够具体。这就是为什么查看 HTML 的一部分会有所帮助。

选项 2:使用其他属性而不是 ID,即类、文本或其他一些属性。

//*[@name='FirstName']

例如。您可以使用属性组合制作相当复杂的 xpath,如果操作正确,它将相当稳定。提高您的 xpath 创建技能将对此类事情派上用场。

关于java - 在使用 Selenium 进行测试自动化期间检查元素时,某些网页中的元素 "id"会发生变化(不是静态的)。如何处理这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55811441/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com