2017-03-01 58 views
0

我有元素的列表,位于硒与By.CssSelector方法:参考硒元素中JavaScriptExecutor

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

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