我正在尝试捕获自动WebDriver测试的一行文本,以便稍后进行比较。但是,我找不到可以与WebDriver一起使用的XPath。我之前使用过text()函数来捕获不在标记中的文本,但是在这个实例中它不起作用。这是HTML,注意这个文本永远不会是相同的,所以我不能使用包含或类似的函数。
<div id="content" class="center ui-content" data-role="content" role="main">
<div data-iscroll="scroller">
<div class="ui-corner-all ui-controlgroup ui-controlgroup-vertical" data-role="controlgroup">
<a class="ui-btn ui-corner-top ui-btn-hover-c" style="text-align: left" data-role="button" onclick="onDocumentClicked(21228772, "document.php?loan=********&folderseq=0&itemnum=21228772&pageCount=3&imageTypeName=1003 Application - Final&firstInitial=&lastName=")" href="#" data-corners="true" data-shadow="true" data-iconshadow="true" data-wrapperels="span" data-theme="c">
<span class="ui-btn-inner ui-corner-top">
<span class="ui-btn-text">
<img class="checkMark checkMark21228772 notViewedCompletely" width="15" height="15" title="You have not yet viewed this document." src="../images/white_dot.gif"/>
1003 Application - Final. (Jan 11 2012 5:04PM)
</span>
</span>
</a>
在此示例中,我尝试捕获的文本是:1003 Application - Final。 (2012年1月11日下午5:04) 我用Firebug检查了元素,我尝试了以下XPath但没有成功。
html/body/div[1]/div[2]/div/div/a[1]/span/span
html/body/div[1]/div[2]/div/div/a[1]/span/span/text()
WebDriver测试是用C#编写的。
答案 0 :(得分:1)
您可以使用此
driver.FindElement(By.XPath(".//div[@id='content']/following-sibling::span[@class='ui-btn-text']")
或
var elem = driver.FindElement(By.Id("Content"));
string text = string.Empty;
if(elem!=null) {
var textElem = elem.FindElement(By.Xpath(".//following-sibling::span[@class='ui-btn-text']"));
if(textElem!=null) text = textElem.Text();
}
答案 1 :(得分:1)
我能够通过从XPath中删除span标记来解决此问题。
GetText("html/body/div[3]/div[2]/div/div/a[1]", SelectorType.XPath);
答案 2 :(得分:0)
python webdriver代码看起来像
driver.find_element_by_xpath("//span[@class='ui-btn-text']").text
但是定位器可能不是唯一的,因为我看不到所有的代码
PS尽量不要使用像html/body/div[1]/div[2]/div/div/a[1]/span/span
答案 3 :(得分:0)
方法: 从Given DOM中找到CSS选择器
派生CSS:css =#content div.ui-controlgroup&gt; a [onclick * ='onDocumentClicked']&gt; span&gt;跨度
使用C#Library方法获取文本。