我想用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;?
答案 0 :(得分:1)
使用inputItem.InnerHtml
或inputItem.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));