2016-03-01 44 views
0

我需要使用FindBy获取包含在下面的HTML文本“ALLEN版” H5元素:硒FindBy找到一个标题标签通过它的文本

<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被添加到该窗口中,所以我不想通过索引像我一直在做的那样找到它,并且我希望它是“Contains”类型的查询,因为版本号总是变化。所以我可以做一个包含“ALLEN Verson”的文本。

回答

1

可能有几种方法来解决这个问题。

方法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); 
+0

这个工作,我用containstext的XPath的例子。你可以编辑它并包含一个使用CssSelector的containstext示例吗? –

+0

我还没有尝试过使用CSS选择器。有一个contains()伪函数从未添加到官方的css规范中。你可以在jQuery中使用它,也可以通过webdriver接口。必须尝试。 –

相关问题