我使用C#和Selenium试图获取行,列和单元格的内容。我有两列,名称和喜欢的颜色。我可以在列Name下获取内容,但是我无法获得Favorite Color列下的内容。两列之间的不同之处在于,收藏夹颜色使用输入标签。以下是HTML页面。
<div class="tableBlock">
<table class="tableTag">
<tr>
<th>Name</th>
<th>Favorite Color</tr>
<tr>
<td>Ken Master</td>
<td>
<input type="text" value="yellow" class="favoriteColorInput"/>
</td>
</tr>
<tr>
<td>Adon Matsui</td>
<td>
<input type="text" value="red" class="favoriteColorInput"/>
</td>
</tr>
<tr>
<td>Robert Carlos</td>
<td>
<input type="text" value="Green" class="favoriteColorInput"/>
</td>
</tr>
<tr>
<td>Ronaldo Luis</td>
<td>
<input type="text" value="Green" class="favoriteColorInput"/>
</td>
</tr>
</table>
</div>
我尝试使用以下代码来获取内容,但是我无法在Favoire Color列下获取内容,因为它返回为空字符串。
public void TraverseTableElement()
{
//XPath to table
IWebElement tagTable =
webDriver.FindElement(By.XPath("//div[@class='tableBlock']/table"));
//get all rows
IList<IWebElement> tagRows = tagTable.FindElements(By.TagName("tr"));
string text = "";
//getrow
foreach (IWebElement tagRow in tagRows)
{
string td = "";
//get all columns
IList<IWebElement> tagCols = tagRow.FindElements(By.TagName("td"));
//get column
foreach (IWebElement tagCol in tagCols)
{
td = tagCol.GetAttribute("value");
text += td;
}
}
}
答案 0 :(得分:0)
您需要从<input>
读取第二列/ td
//for columns with textbox
//Edit 24/01/2018
var byTagNameinput = By.TagName("input");
if(tagCol.IsElementPresent(byTagNameinput){
var inputElement = tagCol.FindElement(byTagNameinput);
text+= inputElement.Text
}
====编辑24/01/2018 ===== 是的,你们是对的,它会引发错误。 我们通过在IWebElement上创建一个扩展方法来处理这个问题,该方法检查项目是否存在。如果需要,您可以使用相同的。 需要在静态类
中创建此方法public static bool IsElementPresent(this IWebElement webElement, By by)
{
try
{
webElement.FindElement(by);
return true;
}
catch (NoSuchElementException)
{
return false;
}
}
答案 1 :(得分:0)
要获取Favorite Color
列下的值,您可以使用以下代码块:
List<string> colors = new List<string>();
IList<IWebElement> options = driver.FindElements(By.XPath("//div[@class='tableBlock']/table[@class='tableTag']//tr//td/input[@class='favoriteColorInput' and @type='text']"));
foreach (IWebElement option in options)
{
string temp = option.GetAttribute("value");
colors.Add(temp);
}