无法获取输入列下的内容

时间:2018-01-23 17:33:21

标签: c# selenium

我使用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;
       }
   }
}

2 个答案:

答案 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);
}