Selenium locator for <label for="x">

selenium, selenium-rc, testing, watin, web-testing

Solution

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

Problem

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?

Original source