Локатор селена для <метки для = «x»>
-
19-09-2019 - |
Вопрос
С ASP.NET идентификаторы тегов довольно изменчивы, поэтому, чтобы сделать мои тесты более надежными, я хочу найти элементы по текстам их ярлыков. Я сыграл немного с Ватином, и в настоящее время это делает это отлично, но этот проект кажется своего рода мертвым, поэтому я подумал, что посмотрю на селен, прежде чем я выберусь на рамки.
У меня есть HTML, который выглядит примерно так
<label for="ctl00_content_loginForm_ctl01_username">Username</label>:
<input type="text" id="ctl00_content_loginForm_ctl01_username" />
Я не хочу печатать:
selenium.Type("ctl00_content_loginForm_ctl01_username", "xxx");
Это слишком зависит от удостоверения личности. В Ватине я бы пишу:
browser.TextField(Find.ByLabelText("Username")).TypeText("xxx");
Есть ли способ сделать это в селене?
Решение
Я считаю, что вы можете сделать это со следующим:
selenium.Type(selenium.getAttribute("//label[text()='Username']/@for"), "xxx");
Text () = 'Username Bit получает желаемую метку, которую вы хотите, по его innerhtml, затем /@возвращает вам значение его атрибута «для».
Берегись: Это не тестируется (извиняюсь за это!) Но я думаю, что это сработает, основываясь на некоторых инструментах в плагине IDE
Другие советы
Это работает:
//input[@id=(//label[text()="Username"]/@for)]
Объяснение: Поскольку вы ищете вход:
//input[@id=("ctl00_content_loginForm_ctl01_username")]
Замените «ctl00_content_loginform_ctl01_username» на значение атрибута метки:
//label[text()="Username"]/@for
Хорошо, это может быть год, но что они эй. Это выберет первый ввод под меткой, содержащей текст «Имя пользователя».
//label[text()='Username']/input
Я обычно предпочитаю использовать содержит (), так как я обнаружил, что некоторые браузеры добавляют раздражающие пространства в случайный элемент:
//label[contains(., 'Username')]/input
Обратите внимание, что единственная черта перед входом обозначает, что он будет выглядеть только на один уровень вниз, где двойная черта будет проверять все уровни под меткой. Используйте Xpather для Firefox, чтобы создать и проверить ваши XPaths, это очень полезно.
Да, вы можете использовать локаторы XPath, CSS или DOM для определения вашего элемента. В этом примере ваш xPath может выглядеть как // lable [@for = 'ctl00_content_loginform_ctl01_username'], чтобы идентифицировать эту конкретную метку.