2017-11-08 13 views
0

C#で入力項目の横にあるテキストを読みたいとします。C#で入力要素のテキスト値を取得する

これは私のHTMLです:

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

私の2回目の試行::私はinput要素のテキストは、次の」取得するにはどうすればよい

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

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

これは私のコードです"?

+0

このテキストの周りにさらにHTMLを表示できますか? – Buaban

答えて

1

GetAttribute("value");.Text()のために代わりinputItem.InnerHtmlまたはinputItem.innerTextを利用して、ここでは両者の差は、次のとおりですのinnerTextとは異なり

、しかし、innerHTMLのは、あなたがHTML、リッチテキスト で作業することができますし、自動的にエンコードしていないとテキストをデコードします。換言すれば、 のinnerTextを取得し、innerHTMLのを取得し、同じ内容を設定し、一方、プレーンテキストとして をタグの内容を設定するが、HTML 形式で

+0

また、inputItem.GetAttribute( "innerHTML");私に ""を与える。 – kame

+0

@kameメソッド 'GetAttribute'の代わりにプロパティ' InputItem.InnerHtml'を試しましたか? –

+0

C#で 'inputItem.InnerHtml'を使用することはできません。 – kame

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')]")); 
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)); 
関連する問題