Я предполагаю, что ваша структура таблицы будет оставаться неизменной при каждом использовании и будет использовать индексы столбцов для доступа к правильным столбцам, а не запрашивать заголовки таблиц для их поиска. Если я ошибаюсь, пожалуйста, дайте мне знать, и я обновлю свой ответ.
В большинстве таблиц будет tbody, который не содержит информацию заголовка и будет содержать только строки. Сначала я ищу это, а затем нахожу строки.
Затем я перебираю эти найденные строки oop, пока не наткнусь на строку с нужным идентификатором рукописи, а затем проверю на соответствие столбцу «Результат». и вернуть логическое значение его состояния.
using System.Collections.ObjectModel;
public string ResultsTable()
{
IWebElement tableElement = Browsers.FindElement(By.CssSelector("#datatable tbody"));
ReadOnlyCollection<IWebElement> tableRows = tableElement.FindElements(By.TagName("tr"));
// These are assumed values and need to be updated by you
int idColumnIndex = 0;
int resultColumnIndex = 5;
const string desiredValue = "Accept";
const string manuScrptId = "D-19";
foreach (var row in tableRows)
{
ReadOnlyCollection<IWebElement> rowCells = row.FindElements(By.TagName("td"));
if (rowCells[idColumnIndex].Text.Equals(manuScrptId))
{
if (rowCells[resultColumnIndex].Text.Equals(desiredValue))
{
return true.ToString();
}
else
{
return false.ToString();
}
}
}
return false.ToString();
}
- Внесены изменения для возврата строки вместо bool. Если вы не хотите, чтобы "false" возвращалось, когда нужное значение не найдено, вы можете вместо этого возвратить null.
Если нет необходимости каждый раз получать заголовки столбцов, тогда это должно работа:
using System.Collections.Generic;
using System.Collections.ObjectModel;
public string ResultsTable()
{
IWebDriver Browsers = new ChromeDriver();
Dictionary<string, int> columnHeaders = new Dictionary<string, int>();
IWebElement tableElement = Browsers.FindElement(By.CssSelector("#datatable"));
ReadOnlyCollection<IWebElement> tableRows = tableElement.FindElements(By.TagName("tr"));
bool getColumnHeaders = true;
const string desiredValue = "Accept";
const string manuScrptId = "D-19";
foreach (var row in tableRows)
{
if (getColumnHeaders)
{
columnHeaders = GetHeaders(row);
getColumnHeaders = false;
}
else
{
ReadOnlyCollection<IWebElement> rowCells = row.FindElements(By.TagName("td"));
if (rowCells[columnHeaders["Id"]].Text.Equals(manuScrptId))
{
if (rowCells[columnHeaders["Result"]].Text.Equals(desiredValue))
{
return true.ToString();
}
else
{
return null;
}
}
}
}
return null;
}
private Dictionary<string, int> GetHeaders(IWebElement headerRow)
{
Dictionary<string, int> columnHeaders = new Dictionary<string, int>();
int counter = 0;
ReadOnlyCollection<IWebElement> rowCells = headerRow.FindElements(By.TagName("td"));
foreach(var cell in rowCells)
{
columnHeaders[cell.Text] = counter;
counter += 1;
}
return columnHeaders;
}
rowCells [columnHeaders ["Id"]]. Text.Equals (manuScrptId) rowCells [columnHeaders ["Result"] ] .Text.Equals (requiredValue)
Вам нужно, чтобы «Id» и «Result» соответствовали фактическому желаемому тексту заголовка столбца.