使用 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>

如上例所示:

  1. 元素 ID 是随机的。
  2. 范围标记内的 INNER 文本随机化的顺序。
  3. span 标记内的 INNER 文本始终相同。

随着所有内容都是随机的,顺序也在变化,我如何以编程方式解析 DOM,找到文本值,然后在找到后确定 XPath?

使用 c# 查找具有已知值的 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);