I was struggling to E2E Selenium test a repeater, in a user control, in an old .net webforms page – tall ask right?
Here is the solution I came up with:
I added a custom attribute (“data-serviceid”) to the element the repeater is drawing – inside the code behind of the user control (a link button in this case):
var lbNewReport = (LinkButton)args.Item.FindControl("lbNewReport");
lbNewReport.Attributes.Add("data-serviceid", myServiceId);
Then I used this static helper method for selenium:
public static By SelectorByAttributeValue(string attributeName, string attributeValue)
{
return (By.XPath($"//*[@{attributeName} = '{attributeValue}']"));
}
With This call:
var linkIWant = _driver.FindElement(SelectorByAttributeValue("data-serviceid", myServiceId));
And voila – I have the control in hand that I want to interact with(clicking in this case for me).