这就是外观(见下文)。我想在字符串变量中保存“Page 1 to 20”文本供以后使用。
这就是我所做的:string numOfPages = driver.FindElement(By.XPath("//*[@id='tabletransaction']/text()")).Text;
我尝试过多种方式,但结果是[对象文本]它不起作用,因为它需要是一个元素。
<div id="tabletransaction">
<table id ="ticketransaction">
<thead><tr><th>Some text</th></tr></thead>
<thead><tr><th>Some text</th></tr></thead>
<thead><tr><th>Some text</th></tr></thead>
<thead><tr><th>Some text</th></tr></thead>
</table>
Page 1 to 20
</div>
答案 0 :(得分:1)
您需要从XPath中删除/text()
:
您的xpath不返回元素;它返回一个文本节点。虽然这可能有 在Selenium RC(以及扩展,Selenium IDE)方法中完全可以接受 在WebDriver WebElement接口上需要一个元素对象,而不仅仅是任何DOM节点 宾语。 WebDriver按预期工作。要解决此问题,您需要更改 用于将文本节点包装在元素内的HTML标记,如
<span>
。
参考:https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/5459#issuecomment-192110781
注意:不幸的是,如果从XPath中删除/text()
,现在将选择整个元素的文本。如果没有任何选择器缠绕"Page 1 to 20"
文本,则无法“选择”此文本。
这是一种解决特定问题的天真方法:
选择<div>
。Text
和<table>
。Text
,然后减去(string.Replace
)<table>
。{{1}来自Text
。<div>
:
Text