With ASP.NET the tag IDs are pretty volatile so to make my tests more robust I want to locate elements by their label texts. I have played some with WatiN and it does this perfectly but that project seem kind of dead nowadays so I thought I'd look into Selenium as well before I decide on a framework.
I have html that looks something like this
<label for="ctl00_content_loginForm_ctl01_username">Username</label>:
<input type="text" id="ctl00_content_loginForm_ctl01_username" />
I don't want to type:
selenium.Type("ctl00_content_loginForm_ctl01_username", "xxx");
That is too reliant on the ID. In WatiN I'd write:
browser.TextField(Find.ByLabelText("Username")).TypeText("xxx");
Is there a way to do this in Selenium?
I believe you can do this with the following:
selenium.Type(selenium.getAttribute("//label[text()='Username']/@for"), "xxx");
The text()='Username' bit gets the label you want by its innerHTML, then the /@for gives you back the value of its "for" attribute.
Heads up: this is not tested (apologies for that!) but I think it'll work, based on some tooling around in the IDE plugin