Вопрос

С 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'], чтобы идентифицировать эту конкретную метку.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top