Brian дает хорошее решение для преобразования его к набору со строгим контролем типов.
большинство данных методов парсинга CSV не принимает во внимание поля выхода или часть другой тонкости файлов CSV (как обрезка полей). Вот код, который я лично использую. Это немного грубо вокруг краев и не имеет в значительной степени никакого сообщения об ошибке.
public static IList> Parse(string content)
{
IList> records = new List>();
StringReader stringReader = new StringReader(content);
bool inQoutedString = false;
IList record = new List();
StringBuilder fieldBuilder = new StringBuilder();
while (stringReader.Peek() != -1)
{
char readChar = (char)stringReader.Read();
if (readChar == '\n' || (readChar == '\r' && stringReader.Peek() == '\n'))
{
// If it's a \r\n combo consume the \n part and throw it away.
if (readChar == '\r')
{
stringReader.Read();
}
if (inQoutedString)
{
if (readChar == '\r')
{
fieldBuilder.Append('\r');
}
fieldBuilder.Append('\n');
}
else
{
record.Add(fieldBuilder.ToString().TrimEnd());
fieldBuilder = new StringBuilder();
records.Add(record);
record = new List();
inQoutedString = false;
}
}
else if (fieldBuilder.Length == 0 && !inQoutedString)
{
if (char.IsWhiteSpace(readChar))
{
// Ignore leading whitespace
}
else if (readChar == '"')
{
inQoutedString = true;
}
else if (readChar == ',')
{
record.Add(fieldBuilder.ToString().TrimEnd());
fieldBuilder = new StringBuilder();
}
else
{
fieldBuilder.Append(readChar);
}
}
else if (readChar == ',')
{
if (inQoutedString)
{
fieldBuilder.Append(',');
}
else
{
record.Add(fieldBuilder.ToString().TrimEnd());
fieldBuilder = new StringBuilder();
}
}
else if (readChar == '"')
{
if (inQoutedString)
{
if (stringReader.Peek() == '"')
{
stringReader.Read();
fieldBuilder.Append('"');
}
else
{
inQoutedString = false;
}
}
else
{
fieldBuilder.Append(readChar);
}
}
else
{
fieldBuilder.Append(readChar);
}
}
record.Add(fieldBuilder.ToString().TrimEnd());
records.Add(record);
return records;
}
Примечание, что это не обрабатывает пограничный случай полей, не являющихся deliminated двойными кавычками, но meerley наличие заключенной в кавычки строки в нем. См. это сообщение некоторое время лучшего expanation, а также некоторых ссылок на некоторые надлежащие библиотеки.
Глядя на исходный код, похоже, что вы помещаете искомый текст в неправильное поле.
verifyTextPresent
(и assert ...) имеет только два параметра, в отличие от verifyText
, для которого также требуется цель.
В отличие от verifyText
текстовый элемент, который вы ищете следует вводить во второе поле «Цель», а не в «Значение».
, таким образом, код становится
<tr>
<td>verifyTextPresent</td>
<td>XYZ</td>
<td></td></tr>
. Я сделал ту же ошибку при изучении Selenium, поскольку имена полей вводят в заблуждение!
Selenium assertions have different modes:
All Selenium Assertions can be used in 3 modes: "assert", "verify", and "waitFor". For example, you can "assertText", "verifyText" and "waitForText". Когда "assert" терпит неудачу, тест прерван. Когда "проверить" не удается, тест будет продолжен выполнение, регистрация ошибки.
Попробуйте assertTextPresent
. Это должно немедленно прервать тест.