Подбрасывая вам несколько идей, Хатман.
В отношении вашей первой функции ....
Вы можете передать значение для «name», а затем ...
using System.Linq;
using System.Collections.Generic;
List<String> item = new List<string>();
IReadOnlyList<IWebElement> cells = driver.FindElements(By.TagName("a"));
foreach (IWebElement cell in cells)
{
item.Add(cell.Text);
}
Затем запустите assert, любое из найденных значений "a" содержит текст?
Assert.IsTrue(item.Any(itm => itm.Contains(name)));
Также вот что еще вы могли бы попробовать? Ниже «значение» может быть любым уникальным значением, которое вы ищете, например, адрес электронной почты, имя, номер учетной записи. «Значение» = i. Итак, если ваша ссылка находится в двух столбцах справа от i, вы можете сказать, что щелкните tds [i + 2] .Click () ;. Если ссылка, по которой вы хотите щелкнуть, находится в трех столбцах слева от i, tds [i-3] .Click (); Вы также можете взять текст отсюда и соответственно утверждать.
public void ClickTableLink(String value)
{
var table = driver.FindElement(By.Id("table"));
foreach (var tr in table.FindElements(By.TagName("tr")))
{
var tds = tr.FindElements(By.TagName("a"));
for (var i = 0; i < tds.Count; i++)
{
if (tds[i].Text.Trim().Contains(value))
{
tds[i].Click();
break;
}
}
}
}
Вот еще один пример .....
<table id="mytable">
<tr>
<th>Name</th> <th> Link1</th> <th>Favorite Color</th> <th>Link2</th>
</tr>
<tr>
<td>Bob</td>
<td><a href="https://foxnews.com">Fox</a></td>
<td>Yellow</td>
<td><a href="https://cnn.com">CNN</a> </td>
</tr>
<tr>
<td>Jim</td>
<td><a href="https://foxnews.com">News1</a></td>
<td>Blue</td>
<td><a href="https://cnn.com">News2</a> </td>
</tr>
<tr>
</tr>
</table>
Это будет искать «Боб», извлекать текст из ссылки и проверять его соответствие значению 2.
var value = "Bob";
var value2 = "Fox";
var table = Browser.FindElement_byId("mytable");
foreach (var tr in table.FindElements(By.TagName("tr")))
{
var tds = tr.FindElements(By.TagName("td"));
for (var i = 0; i < tds.Count; i++)
{
if (tds[i].Text.Trim().Contains(value))
{
var test = tds[i + 1].Text.Trim();
Assert.IsTrue(test.Contains(value2));
break;
}
}
}