我有一堆radio buttons
,并希望从每个标签的标签中获取文字。这是我到目前为止所尝试的:
IList<IWebElement> radioButtons = wd.FindElements(By.Name("Components[0].Entity.ComponentSubTypeId"));
foreach (IWebElement i in radioButtons)
{
Console.WriteLine(i.Text);
}
我知道它们存储在List
中,因为当我从上面删除.Text
时,会将许多OpenQA.Selenium.Firefox.FirefoxWebElement
写入输出控制台,并使用它完全匹配页面上radio buttons
的数量。
以下是页面上HTML
之一的radio buttons
:
<li class="optionListItem">
<span class="floatLeftSmallMargin componentTypeOptions">
<input class="required" id="Components_0__Entity_Entity_ComponentTypeId_PublicationGravure" name="Components[0].Entity.ComponentSubTypeId" type="radio" value="-2147380659" />
</span>
<span class="optionListItemText componentTypeOptions">
<label for="Components_0__Entity_Entity_ComponentTypeId_PublicationGravure">Publication Gravure</label>
<span class="helpButton" data-title="Publication Gravure" data-text="A printing method on a substrate that is subsequently formed into books, magazines, catalogues, brochures, directories, newspaper supplements or other types of printed materials.">
</span>
</span>
<div class="clear"></div>
</li>
但是,当我将.Text
附加到foreach参数中的索引i时,没有任何内容写入输出控制台。
答案 0 :(得分:3)
问题是您的IList<IWebElement> radioButtons
不包含标签。
它只包含没有任何文本的input
。因此,当您执行.Text
时,您将看不到任何文字。
IList<IWebElement> labels = wd.FindElements(By.CssSelector(".optionListItem .optionListItemText label"));
现在迭代labels
并致电.Text
,您会看到标签名称。
答案 1 :(得分:2)
它没有返回任何内容的原因是因为单选按钮确实没有文本但你选择了它们,这里是.Text
如何工作的实际例子:
<li >
<span id="foo">My text</span>
<input name="bar" type="radio"/>I'm not part of the radio
</li>
现在让我们从上面提取文本
//This will return "My text"
IWebElement spanText= wd.FindElement(By.CssSelector("#foo")).Text
//This will return empty
IWebElement spanText= wd.FindElement(By.XpathSelector("//input")).Text
在你的情况下它应该看起来像这样
IList<IWebElement> labels = wd.FindElements(By.CssSelector(".optionListItem .optionListItemText label"));
foreach (IWebElement i in labels)
{
Console.WriteLine(i.Text);
}