В селене, не в состоянии нажать на ошибку сообщение «ОК»

1

Изображение 174551

Я пытаюсь нажать кнопку OK с помощью селена, не могу найти элемент.

objBrowser.findElement(By.xpath("//button[contains(text(), 'OK')]")).click();

Кнопка ОК. Проверьте код элемента, как показано ниже.

<button class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" role="button" aria-disabled="false" jQuery15109548211953493255="16">

<span class="ui-button-text"> Text - OK
Теги:
selenium-webdriver
error-handling

4 ответа

2
Лучший ответ

text() выбирает только текстовые дочерние узлы под текущим контекстным узлом (button). Текстовый узел не содержит button OK.

Скорее всего, вам нужно:

By.xpath("//button[contains(span/text(), 'OK')]")

Если элемент не отображается сразу или не доступен, вам нужно его дождаться. Обычно это делается с помощью WebdriverWait:

WebDriverWait wait = new WebDriverWait(webDriver, 3); // 3 seconds at most
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(...));
  • 0
    вау, спасибо за более точный ответ.
  • 0
    @learner Я видел ваш ответ, лучше сделать это с WebdriverWait вместо Thread.sleep() , потому что он продолжит выполнение, как только элемент будет там. Thread.sleep () может нарушить ваш тест, если элементу требуется больше времени, чем статическое время.
1

Попробуйте это с помощью cssSelector.

objBrowser.findElement(By.cssSelector("button:contains('Ok')")).click();
  • 0
    Получено это исключение - NoSuchElementException: невозможно найти элемент с помощью css selector == button: содержит ('ОК')
  • 0
    Похоже, что это потенциально связано с тем, что OK в верхнем регистре. try: objBrowser.findElement(By.cssSelector("button:contains('OK')")).click();
Показать ещё 4 комментария
1

Включите его в свой тестовый код

import org.openqa.selenium.Alert;

и после действия, которое открывает предупреждающее сообщение

Попробуйте ниже код

Alert alert_test = driver.switchTo().alert();

alert_test.accept();

Дайте мне знать сообщение об ошибке в случае, если оно не работает.

Для всплывающего окна Modal, попробуйте подходить и проверяйте.

Используйте ниже код после действия, которое открывает предупреждающее сообщение

Robot robot = new Robot();

robot.keyPress(KeyEvent.VK_TAB);

robot.keyRelease(KeyEvent.VK_TAB);

Примечание. Несколько раз для распознавания модального всплывающего окна требуется несколько секунд, но иногда это происходит немного долго, поэтому под временем вы можете изменять в соответствии с вашими потребностями.

Thread.sleep(7000);

robot.keyPress(KeyEvent.VK_ENTER); 

robot.keyRelease(KeyEvent.VK_ENTER);
  • 0
    На самом деле это не Alert - это всплывающее окно модели. Ошибка - org.openqa.selenium.NoAlertPresentException: предупреждение не активно
  • 0
    У нас очень мало подходов к работе с модальными блоками в селене, и очень немногие из них действительно работают в таких случаях, но да, мы можем обращаться с ними разумно. Можете ли вы сказать мне, когда вы нажимаете на действие, которое открывает это модальное всплывающее окно, где вы находите курсор. Например, если вы нажимаете кнопку ввода на клавиатуре вручную, закрывает ли оно модальное всплывающее окно?
Показать ещё 1 комментарий
0

@Rupesh и @Artjom B. Спасибо

Я проверил, и оба ваших ответа работают.

Но реальная проблема была на кнопке, где всплывает ошибка msg. поэтому я добавил спать перед кнопкой удаления, на котором появляется всплывающее окно, и это работает с обоими вашими ответами.

Thread.sleep(1000);
objBrowser.findElement(By.cssSelector("input[Value='Remove']")).click();

objBrowser.findElement(By.xpath("//button[contains(span/text(), 'OK')]")).click();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню