Selenium — Как нажать кнопку OK во всплывающем окне, используя текст, содержащийся в этой кнопке

#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.