在JavaScriptExecutor中引用selenium元素

时间:2017-03-01 16:57:31

标签: javascript .net selenium selenium-webdriver webdriver

我有一个元素列表,位于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中使用它的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以将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);