javascript - JavaScriptExecutor 中引用 selenium 元素

标签 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 中使用它的唯一方法吗?

最佳答案

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

相关文章:

javascript - 用 Perl 替换 HTML 文件的 JavaScript 代码

php - 使用时间发布表单

.net - 用于 memcached .NET 客户端的高效通用序列化程序

c# - 如何为不接受取消 token 的异步函数设置超时?

selenium - 位于 selenium 2.0 中检查 DOM 上元素是否存在的元素可见性的替代方案?

Selenium 选择具有多个属性的元素

javascript - 在 Javascript 中使用动态键的正则表达式

javascript - php多维数组到javascript数组的转换

c# - 提供 .NET 方法作为委托(delegate)回调

javascript - 网页抓取自动化 如何在没有链接标签的情况下模拟点击 H​​REF 链接?