【发布时间】:2013-12-01 05:20:42
【问题描述】:
我正在使用 selenium 测试一个 web 应用程序,id 和类总是动态变化。所以我无法给出正确的识别,是否可以在运行时获取元素的 id,还有其他的吗处理这种情况的方法。
【问题讨论】:
我正在使用 selenium 测试一个 web 应用程序,id 和类总是动态变化。所以我无法给出正确的识别,是否可以在运行时获取元素的 id,还有其他的吗处理这种情况的方法。
【问题讨论】:
这取决于 id 是完全随机的,还是 id 的某些部分保持不变。如果是,那么cssSelector 是显而易见的选择
driver.findElement(By.cssSelector("div[id*=somePart]");
其中id* 表示 id 包含。如果您不能使用这种方法,您将不得不使用xpath 或再次使用cssSelectors 来追踪您的元素。 XPath 示例为 here,CSS 选择器可能如下所示
By.cssSelector("boyd table input");
【讨论】:
我强烈建议通过 XPath 定位元素——需要注意的是,您要使 XPath 变得健壮,而不仅仅是使用浏览器的开发工具“复制”xpath。 XPath 非常容易学习。您可以使用 XPath 在 DOM 中上下移动,并通过元素的文本或属性来识别元素。
例如,您可能需要单击一个按钮,该按钮的 span 包含按钮上显示的文本:
<div class="btn-row random-generated-number-1234897395">
...
<button id="random-generated-number-239487340924257">
<span>Click Here!</span>
</button>
...
</div>
然后您可以使用这样的 xpath:
//div[contains(@class, 'btn-row')]//button/span[text()='Click Here!']/..
(末尾的/.. 从跨度向上走回到按钮。)
XPath 功能强大、灵活且易于学习。当 ids 和 classes 不可靠时使用它。
【讨论】: