#selenium
#selenium
Вопрос:
Приведенный ниже код показан в firebug для кнопки OK во всплывающем окне моего приложения
<button id="ext-gen219" class="x-btn-text" type="button">
amp;nbsp;amp;nbsp;OKamp;nbsp;amp;nbsp;
</button>
Здесь идентификатор кнопки генерируется случайным образом, а также положение кнопки ok не идентифицируется. Есть ли способ нажать на кнопку по ее тексту? Например, кнопка содержит текст с именем OK.
Комментарии:
1. Я думаю, вы что-то упустили.
2. Я не сомневаюсь, что когда нет пробела (amp; nbsp) до и после OK, тогда это работает //кнопка [содержит (text (), «OK»)], но проблема, с которой я сталкиваюсь, заключается в том, что всплывающее окно появляется поверх другого всплывающего окна, и у обоих есть кнопка OK. Код, который я вставил выше, является вторым всплывающим кодом. как использовать текст содержит, когда до и после текста есть пробел
Ответ №1:
Для Selenium IDE или Selenium RC, xpath=//button[contains(., 'OK')]
должен быть хороший локатор.
Ответ №2:
Я исхожу из предпосылки, что текст всплывающих окон не идентичен, поэтому я бы рекомендовал что-то вроде этого:
List<IWebElement> dialogBox = driver.FindElements(By.Class("dialogBoxClass");
int buttonIndex = dialogBox.FindIndex(i => i.FindElement(By.Class("DisplayedTextElementClass").Text.Contains("some unique text here"));
dialogBox[buttonIndex].FindElement(By.ClassName("x-btn-text")).Click();
Это захватывает родительский элемент всех диалоговых окон, а затем анализирует каждый объект, чтобы найти индекс нужного окна, а затем нажимает на кнопку «Ok» в правильном объекте.
Комментарии:
1. Привет, мы используем фреймворк, основанный на ключевых словах, поэтому мне нужен точный xpath
2. Я думаю, я не вижу, как это имеет какое-либо значение. На мой взгляд, если вы можете захватить элемент button, то вы можете захватить элемент wrapper, а затем просто создать пользовательский метод или класс для анализа wrapper, чтобы найти вашу конкретную кнопку.
Ответ №3:
В случае кнопки отправки этот локатор css=input:submit[value="OK"]
должен работать. В случае элемента button возьмите css=button:contains("OK")
.
Комментарии:
1. Я не сомневаюсь, что когда нет пробела (amp; nbsp) до и после OK, тогда это работает //кнопка [содержит (text (), «OK»)], но проблема, с которой я сталкиваюсь, заключается в том, что всплывающее окно появляется поверх другого всплывающего окна, и у обоих есть кнопка OK. Код, который я вставил выше, является вторым всплывающим кодом. как использовать текст содержит, когда до и после текста есть пробел
2. Вопреки тому, что многие люди думают, нет селектора CSS «: contains». Это было предложение, которое было отклонено в процессе разработки стандартов CSS3.