Перейти к содержимому

Фотография

Переключение на окно подтверждения действия


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 11

#1 viktor___

viktor___

    Новый участник

  • Members
  • Pip
  • 8 сообщений

Отправлено 26 ноября 2018 - 08:13

Конечно заезженный вопрос, но никак не могу найти решение следующей ситуации: появляется окно для подтверждения действия, но саму кнопку Селениум не определяет -  unable to locate element. Как я понимаю, изначально должен переключиться на это всплывающее окно, чтобы сделать его активным, но пока безуспешно. Frame нет, пытался через submit сделать, windows handles тоже не подходит. Может у кого-то есть мысли как добиться выполнения действия? Заранее спасибо за ответ!

 

 

 

 

<div class="modal-dialog type-warning ui-resizable ui-draggable" role="document" style="left: 12px; top: 12px;">
        <div class="modal-content">
            <div class="modal-header ui-draggable-handle">
                <button type="button" class="close" data-dismiss="modal" aria-label="Close" ng-click="confirmDialog.onClose()">
                    <span aria-hidden="true">×</span>
                </button>
                <h4 class="modal-title ng-binding" id="myModalLabel" ng-bind="confirmDialog.title | tsq">Removing session</h4>
            </div>
            <div class="modal-body" style="height: auto;">
                <form class="form-horizontal ng-pristine ng-valid" role="form">
                    <div class="form-group">
                        <label class="col-sm-12" style="text-align: center; font-size: 16px;">
                            <span ng-bind-html="confirmDialog.message | tsq | html" class="ng-binding">Are you sure you want to remove session 'Test Session'?</span>
                        </label>
                    </div>
                </form>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default ng-binding" data-dismiss="modal" ng-click="confirmDialog.callback(false)" ng-bind="confirmDialog.yesNo ? 'No' : 'Cancel'">No</button>
                <button type="button" class="btn btn-primary ng-binding" data-dismiss="modal" ng-click="confirmDialog.callback(true)" ng-bind="confirmDialog.yesNo ? 'Yes' : (confirmDialog.okButtonTitle ? confirmDialog.okButtonTitle : 'OK')">Yes</button>
            </div>
        </div>
    <div class="ui-resizable-handle ui-resizable-e" style="z-index: 90;"></div><div class="ui-resizable-handle ui-resizable-w" style="z-index: 90;"></div></div>


  • 0

#2 Noksa

Noksa

    Активный участник

  • Members
  • PipPip
  • 117 сообщений
  • ФИО:Александр

Отправлено 26 ноября 2018 - 08:25

А вы уверены, что локатор правильный?

 

Лично я очень часто встречаю, что modal-content открывается в том же контексте, т.е. ничего не нужно свитчить, ни фрейм, ни окно.


  • 1

#3 viktor___

viktor___

    Новый участник

  • Members
  • Pip
  • 8 сообщений

Отправлено 26 ноября 2018 - 18:44

В принципе на это и похоже, никаких окон и фреймов, но по xpath-у не может залокейтить кнопку


  • 0

#4 sergueik

sergueik

    Постоянный участник

  • Members
  • PipPipPip
  • 166 сообщений
  • ФИО:кузьмин сергей

Отправлено 28 ноября 2018 - 01:53

приведите страницу полностью пожалуйста - не только диалог но и прочее. чтобы другие могло попробовать -  спасибо


  • 0

#5 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 06 декабря 2018 - 08:48

driver.switchTo().alert().accept() пробовали?


  • 0

#6 viktor___

viktor___

    Новый участник

  • Members
  • Pip
  • 8 сообщений

Отправлено 12 декабря 2018 - 06:25

driver.switchTo().alert().accept() пробовали?

Да, пробовал, но без успеха. Временно решил проблему нажатием Enter для подтверждения, но это лишь временный вариант. Пытаюсь сейчас применить фреймворк ngWebDriver для работы с Angular, посмотрим что выйдет.


  • 0

#7 sergueik

sergueik

    Постоянный участник

  • Members
  • PipPipPip
  • 166 сообщений
  • ФИО:кузьмин сергей

Отправлено 12 декабря 2018 - 13:22

https://github.com/s...eik/jProtractor
или
https://github.com/p...ant/ngWebDriver

 

если останутся сложности приведите пример страницу целиком попробую помочь и добавлю в 

https://github.com/s...or/integration 


  • 0

#8 viktor___

viktor___

    Новый участник

  • Members
  • Pip
  • 8 сообщений

Отправлено 13 декабря 2018 - 06:24

https://github.com/s...eik/jProtractor
или
https://github.com/p...ant/ngWebDriver

 

если останутся сложности приведите пример страницу целиком попробую помочь и добавлю в 

https://github.com/s...or/integration 

Прикрепленные файлы

  • Прикрепленный файл  SQ.html   181,48К   8 Количество загрузок:

  • 0

#9 sergueik

sergueik

    Постоянный участник

  • Members
  • PipPipPip
  • 166 сообщений
  • ФИО:кузьмин сергей

Отправлено 20 декабря 2018 - 03:56

@viktor___ к сожалению без стилей страница рендерится никак и понять как поднять в ней хоть один из `modal-dialog` не получается... не могли бы вы  и стили дать посмотреть тоже ? кстати судя по обилию 'x' кнопок там фреймов действительно нету и нужен будет один - другой FluentWait VisibilityOfElement/ invisibilityOfElement - а элемент искать по model    

 

кстати если это публичная страница то может дадите url ? 

Прикрепленные файлы


  • 0

#10 sergueik

sergueik

    Постоянный участник

  • Members
  • PipPipPip
  • 166 сообщений
  • ФИО:кузьмин сергей

Отправлено 20 декабря 2018 - 05:58

сделал пример работы с полями Angular диалога с одним ng_binding элементом

из

http://fiddle.jshell...uch/RLQhh/show/

в
https://github.com/s...jProtractor.git

тест

@Test
public void testModaulWithAlertWait() {
getPageContent("ng_modal2.htm");
WebElement showDialogButton = ngDriver.findElement(NgBy.buttonText("Open modal"));
showDialogButton.click();


WebElement titleElement = wait.until(ExpectedConditions.visibilityOf(ngDriver.findElement(NgBy.binding("title"))));


WebElement dialogElement = titleElement.findElement(By.xpath("../.."));


System.err.println(
"Dialog Element contents: " + dialogElement.getAttribute("outerHTML"));



dialogElement уже обычный WebElement и вск его дочерние е-ты ищутся простыти By:
 

List<String> formElementIds = new ArrayList<>(
Arrays.asList(new String[] { "email", "password" }));


for (String formElementId : formElementIds) {


List<WebElement> labelElements = dialogElement.findElements(By
.cssSelector(String.format("form label[ for='%s']", formElementId)));
assertThat(labelElements.size(), equalTo(1));
highlight(labelElements.get(0));
 

Прикрепленные файлы


  • 0

#11 viktor___

viktor___

    Новый участник

  • Members
  • Pip
  • 8 сообщений

Отправлено 20 декабря 2018 - 06:58

Посмотрю сегодня еще, спасибо. Дело в том, что это декстопное приложение с UI через браузер.


  • 0

#12 sergueik

sergueik

    Постоянный участник

  • Members
  • PipPipPip
  • 166 сообщений
  • ФИО:кузьмин сергей

Отправлено 20 декабря 2018 - 13:40

если можете выложить кусок со стилями и скриптами то пож-та сделайте... желательно с *одним* а не "сто одним" диалогом


  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных