在C#

时间:2017-11-08 06:18:01

标签: c# html selenium text input

我想用C#读取输入项旁边的文本。

这是我的HTML:

<p id="mpNames">
  <input id="selectMp1" type="checkbox">
  "Text next to the input element"       

这是我的代码:

var inputWeList = drv.FindElements(By.CssSelector("#mpNames > input"));
foreach (var inputItem in inputWeList)
{
       var inputItemText = inputItem.GetAttribute("value");  // gives "on"
       ...
}

我的第二次尝试:

var inputWeList = drv.FindElements(By.CssSelector("#mpNames > input"));
foreach (var inputItem in inputWeList)
{
       var inputItemText = inputItem.Text();  // gives ""
       ...
}  

如何获得&#34;输入元素旁边的文字&#34;?

3 个答案:

答案 0 :(得分:1)

使用inputItem.InnerHtmlinputItem.innerText代替GetAttribute("value");.Text(),以下是两者之间的区别:

  

与innerText不同,innerHTML允许您使用HTML富文本   并且不会自动编码和解码文本。换一种说法,   innerText检索标签的内容并将其设置为纯文本,   而innerHTML检索和设置相同的内容,但在HTML中   格式

答案 1 :(得分:1)

似乎文字"Text next to the input element"不在<input>标记之内。所以而不是:

var inputWeList = drv.FindElements(By.CssSelector("#mpNames > input"));

您可以尝试:

var inputWeList = drv.FindElements(By.XPath("//p[@id='mpNames' and not(@type='checkbox')]"));

答案 2 :(得分:0)

您需要通过JavaScript获取它们,因为文本位于同一父级下。 JavaScript需要遍历< id="mpNames"的子节点,并返回作为文本节点的所有子节点。请参阅下面的示例。

var script = @"function getTextNode(rootNode) {
    var nodes = rootNode.childNodes;
    var fieldNames = [];
    var count=0;
    for (var i = 0; i < nodes.length; i++) {
        if ((nodes[i].nodeType == Node.TEXT_NODE)) {            
                let text = nodes[i].textContent.trim();
                fieldNames[count++] = text;                   
        }
    }
    return fieldNames;
}";

var results = (drv as IJavaScriptExecutor).ExecuteScript(script) as List<string>;
results.ForEach(txt => System.Diagnostics.Debug.WriteLine(txt));