如何在C#中使用selenium在div下面直接放置文本?

时间:2017-06-27 14:47:17

标签: c# selenium xpath

这就是外观(见下文)。我想在字符串变量中保存“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>

1 个答案:

答案 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