2017-03-01 76 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);