Я пытаюсь нажать кнопку 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
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(...));
Попробуйте это с помощью cssSelector.
objBrowser.findElement(By.cssSelector("button:contains('Ok')")).click();
OK
в верхнем регистре. try: objBrowser.findElement(By.cssSelector("button:contains('OK')")).click();
Включите его в свой тестовый код
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);
@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();
Thread.sleep()
, потому что он продолжит выполнение, как только элемент будет там. Thread.sleep () может нарушить ваш тест, если элементу требуется больше времени, чем статическое время.