Selenium FindBy 通过文本查找标题标签

本文关键字:查找 标题 标签 文本 FindBy Selenium | 更新日期: 2023-09-27 18:36:54

我需要使用 FindBy 来获取包含以下 HTML 中文本 "ALLEN VERSION" 的 H5 元素:

<div id="showAboutContent" class="modal fade in" style="display: block;" aria-hidden="false">
<div class="modal-dialog" style="width: 550px;">
<div class="modal-content">
<div class="modal-header" style="color: #96c4f3;background-color: #071c3f;">
<div class="modal-body" style="background-color: #D6E3F9; overflow-y: hidden; ">
<div class="modal-body" style="margin-left: 10px; margin-top: -20px; overflow-y: hidden;">
<img style="width:120px;height:120px; opacity:20" src="/ALEX/Logo/AboutBoxLogosvg.svg">
<h5>
<h5>
<h5>
<b> ALEX Version: 1.6.0 </b>
</h5>
<h5>
<b> ALLEN Version: 1.4.0 </b>
</h5>
<div style="background-color: #D6E3F9; padding: 10px; text-align: right; ">
</div>
</div>
</div>
</div>
</div>
</div>

我没有包含整个页面的 HTML,我认为没有必要包含,因为我已经找到了包含 H5 的框架:

var aboutFrame = driver.FindElement(By.Id("showAboutContent"));

因此,由于我已经找到了该元素,因此我通过使用它的标签名称和索引在该框架中找到了我想要的 h5,如下所示:

var allenVersion = aboutFrame.FindElements(By.TagName("h5"))[3];

但是,我想使用某种类型的"文本包含"方法来查找该元素。这是因为可能有更多的h5添加到该窗口中,所以我不想像我一直做的那样按索引找到它,我希望它是"包含"类型的查询,因为版本号总是变化。所以我可以做一个包含"艾伦·弗森"的文本。

Selenium FindBy 通过文本查找标题标签

可能有几种方法可以对此进行皮肤处理。

方法1:检查所有h5元素

一种是选择所有H5标签,然后确定您要查找的标签。 它可能看起来像这样。

var allenVersion;
var tags = aboutFrame.FindElements(By.TagName("h5"));
foreach (var tag in tags) {
  if (tag.Contains("ALLEN Version")) {
    allenVersion = tag;
    break;
  }
}

方法 2 : XPath

您还可以使用 XPath 选择器来查找版本元素。 您可以围绕文档结构或要查找的文本设计 XPath 选择器。这可能看起来像这样。

var allenSelector = By.XPath("//*/div[@class='modal-body'/h5[4]");
var allenVersion = aboutFrame.FindElement(allenSelector);

var allenSelector = By.XPath("//*/h5/b[contains(text(), 'ALLEN Version')]");
var allenVersion = aboutFrame.FindElement(allenSelector);