我有一个元素列表,位于 Selenium 中,使用 By.CssSelector
方法:
var contentRows = new List<TableRow>();
for (var i = 1; i < PositiveInfinity; i++)
{
var cssSelectorToFind = $"tbody > tr:nth-child({i})";
var bySelector = By.CssSelector(cssSelectorToFind);
var rowElement = WebElement.FindElements(bySelector).ToArray();
if (rowElement.Length == 1)
{
var description = $"{Description} Content row: {i}. Selected by: {bySelector}.";
var tableRow = new TableRow(bySelector, WebDriver, description, Headers);
contentRows.Add(tableRow);
}
else
{
if (rowElement.Length == 0)
{
break;
}
else
{
throw new InvalidOperationException($"The selector {bySelector} returned more that one row at the same ordinal position. Should be impossible... Best look at the selector and the HTML.");
}
}
}
return contentRows;
对于每一行,我需要在 selected
的 HTML 中设置一个类。
我知道我必须使用 JavaScriptExecutor
来完成此操作。
- 有没有办法获得对其中每一个的引用,以便我可以单独添加它?
- 是为每一行提供唯一 ID 然后在 JavaScrit 中使用它的唯一方法吗?
最佳答案
您可以将 IWebElement
引用作为参数传递给 ExecuteScript
,然后在 JavaScript 中使用这些引用(如果您需要的话)。例如,如果您有一个 IWebElement
并希望通过在其周围绘制红色边框来突出显示它,则可以使用以下代码(基于 the answers to this question :
var element = driver.FindElement(By.Name("..."));
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].style.border='3px solid red'", element);
关于javascript - JavaScriptExecutor 中引用 selenium 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42537630/