使用 c# 查找具有已知值的 XPath
本文关键字:XPath 查找 使用 | 更新日期: 2023-09-27 18:33:27
我正在尝试使用c#和Selenium Webdriver为内部公司网站编写自动冒烟测试。
问题是网站是使用大量的Dojo Javascript动态生成的。它还包含框架和弹出窗口。o_O
因此,每次加载页面时,正常的元素属性都是随机的,并且永远不会始终相同。
顺序也是随机的。
唯一已知的常量是这些标签中包含的内部文本。
示例 1(初始页面加载(:
<div id="23">
<span id="Random40">KNOWN TEXT ONE</span>
<span id="Random41">KNOWN TEXT TWO</span>
<span id="Random42">KNOWN TEXT THREE</span>
</div>
示例 2(后续页面加载(:
<div id="Random 11">
<span id="Random45">KNOWN TEXT THREE</span>
<span id="Random46">KNOWN TEXT ONE</span>
<span id="Random43">KNOWN TEXT TWO</span>
</div>
如上例所示:
- 元素 ID 是随机的。
- 范围标记内的 INNER 文本随机化的顺序。
- span 标记内的 INNER 文本始终相同。
随着所有内容都是随机的,顺序也在变化,我如何以编程方式解析 DOM,找到文本值,然后在找到后确定 XPath?
知道文本就足够了,因为一旦你通过文本找到一个元素:
//span[. = "KNOWN TEXT ONE"]
您可以使用不同的轴向上、向下和横向移动。
driver.findelement(By.cssseector("div:firt-child"((.cick((;
它将选择第一个元素例如:它将选择"已知文本一">
//div[./span[contains(text(), 'KNOWN TEXT ONE')]][./span[contains(text(), 'KNOWN TEXT TWO')]][./span[contains(text(), 'KNOWN TEXT THREE')]]
如果要在帧之间导航,则需要先切换到包含节点的帧,然后才能看到它。 切换到帧后,您还需要进行短暂的睡眠或隐式等待,因为 Selenium 不会等待实际的帧切换发生。
driver.SwitchTo().Frame("Frame Name");
Thread.Sleep(100);