使用c#查找具有已知值的XPath

时间:2016-02-05 15:53:55

标签: c# selenium xpath

我正在尝试使用c#和Selenium Webdriver为内部企业网站编写自动smoketest。

问题是该网站是使用大量Dojo Javascript动态生成的。它还包含框架和弹出窗口。 O_O

因此,每次加载页面时,普通元素属性都是随机的,并且永远不会一致。

订单也是随机的。

唯一已知的常量是这些标记中包含的INNER文本。

示例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. span标记内的INNER文本随机化的顺序。
  3. span标记内的INNER文本始终相同。
  4. 随着一切被随机化并且顺序改变我如何以编程方式解析DOM,找到文本值,然后确定XPath一旦找到?

3 个答案:

答案 0 :(得分:0)

一旦你通过文字找到了一个元素,知道文本就足够了:

//span[. = "KNOWN TEXT ONE"]

你可以使用different axes向上,向下和横向上升。

答案 1 :(得分:0)

driver.findelement(By.cssseector( “DIV:firt胎”))。依序按一下();

它将选择第一个元素 例如:它会选择'KNOWN TEXT ONE'

答案 2 :(得分:0)

//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);