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

Vikonder

Регистрация: 07 дек 2017
Offline Активность: 07 июн 2020 13:21
-----

Мои темы

Обработка OS Popups используя Selenium Webdriver (Java)

13 ноября 2018 - 07:56

Камрады!

 

Задача обработать через UI pop-up операционной системы, для операций типа Import/Export

Речь идет о файлах excel

Т.е. нужно из меню Web- аппликации выбрать пункт Import/Export и в окошке всплывабщего окна выбрать Save/Browse..

 

Прикрепленный файл  Export.jpg   31,27К   0 Количество загрузок:

 

Selenium не обрабытывает такое событие.

Попытался сделать вот так  (ставлю внешнюю ссылку)

 

Export:

public class TestPassDownloadPopupDialogUseRobot {

    public static void main(String[] args) throws InterruptedException, AWTException, IOException {

        System.setProperty("webdriver.gecko.driver", "C:/selenium/geckodriver.exe");

        TestPassDownloadPopupDialogUseRobot example = new TestPassDownloadPopupDialogUseRobot();

        example.passFirfoxDownloadDialogUseRobot();

    }

    /* Use java.awt.Robot class to operate Firefox download popup dialog. */
    public void passFirfoxDownloadDialogUseRobot()
    {
        WebDriver ffDriver = null;
        try
        {
            String downloadUrl = "http://www.dev2qa.com/download/326/";

            // Initiate Firefox WebDriver object.
            ffDriver = new FirefoxDriver();

            // Navigate to the download url.
            ffDriver.navigate().to(downloadUrl);

            // Create Robot object.
            Robot robotObj = new Robot();

            // Press arrow down key to select save radio button.
            Thread.sleep(2000);
            robotObj.keyPress(KeyEvent.VK_DOWN);
            robotObj.keyRelease(KeyEvent.VK_DOWN);

            // Press tab key and navigate to Save button.
                Thread.sleep(2000);
                robotObj.keyPress(KeyEvent.VK_TAB);

            // Press down Save button.
            Thread.sleep(2000);
            robotObj.keyPress(KeyEvent.VK_ENTER);

            // Release up Save button, download process start.
            Thread.sleep(2000);
            robotObj.keyRelease(KeyEvent.VK_ENTER);

        }catch(Exception ex)
        {
            ex.printStackTrace();
        }finally
        {
            if(ffDriver!=null)
            {
                ffDriver.close();
                ffDriver = null;
            }
        }
    }

}

В результате, диалог откпывается, но ничего не происходит..

 

Для Import- пока вообще нет идей...

 

Может кто-нибудь сталкивался с такой задачей и есть более корректные решения?

 

 

 


Увеличить/Уменьшить значение InputBox по MouseClick

26 сентября 2018 - 17:08

Камрады!

 

Вот такая вот есть необходимость, увеличивать/уменьшать значения по клику мышки

 

 

6a2f595f3417834a2c419957a3e92f8d-full.jp

Код:

<td class="ng-scope" ng-class="{'disabled': currentStep < 2}" ng-if="!model.isZoneCompleted">
   <input class="number ng-pristine ng-untouched ng-valid ng-not-empty ng-valid-min ng-valid-max" 
          ng-model="region.numberOfComputes" ng-disabled="currentStep < 2 || model.isZoneCompleted 
          || zoneExpired" ng-change="events.checkTable()" min="1" max="9" 
          ng-show="zone.numberOfComputes > 0" ng-class="{'disabled': zoneExpired}" 
          formation-id="compute-nodes-0" type="number"/>
</td>

Как можно обработать событие MouseClick()

 

сам элемент --> driver.findElement(By.xpath("//input[@formation-id='compute-nodes-0']"));

 


Прочитать все элементы из dropdown в List <String>

15 сентября 2018 - 09:51

Камрады!

 

Столкнулся с такой проблемой:

- Необходимо прочитать весь список из dropdown и передать его в List<String>

 

23343897.jpg

 

Классически, до этого я использовал заполнение списка List<WebElement> по индексу динаического xpath

i.e.

public static String SOURCE_RACK_NAME_SELECTED = "//span[@formation-id='source-rack-name-%d']";

@Step(description = "Get all WebElements from the dropdown list input")
public List<WebElement> getAllElementsFromDropDownList(By xpathList, String xpathElement) {
      List<WebElement> webElementsArrayList = new ArrayList<>();
         aitForElementToBeVisible(xpathList);

           List<WebElement> webElementsFromDropDown = driver.findElements(xpathList);

     for (int i=0; i<webElementsFromDropDown.size(); i++) {

                  String xpathRackFilter = String.format(xpathElement, i);
                  By xpathRack = By.xpath(xpathRackFilter);
                  WebElement listElement = driver.findElement(xpathRack);
                  webElementsArrayList.add(listElement);

     }
               System.out.println("<------------- The elements List -------------> " + webElementsFromDropDown);
       return webElementsArrayList;
}

Сейчас же для магипуляций с элементами списка, они должны быть String по-умолчанию

1. Открыть dropdown

2. Прочитать весь список в List<String>

3. Random выбрать один элемент

4. Вернуть его

 

Код html:

<div class="ui-select-choices-group optgroup">
<div class="ui-select-choices-group-label optgroup-header ng-binding ng-hide" ng-show="$select.isGrouped" ng-bind="$group.name"/>
<!-- ngRepeat: rack in $select.items -->
<!-- ngIf: $select.open -->
<div class="ui-select-choices-row ng-scope active" role="option" ng-class="{active: $select.isActive(this), disabled: $select.isDisabled(this)}" 
            ng-repeat="rack in $select.items" ng-if="$select.open" ng-click="$select.select(rack,$select.skipFocusser,$event)" style="">
<div class="option ui-select-choices-row-inner" data-selectable="" uis-transclude-append="">
<span class="ng-binding ng-scope" ng-bind-html="rack | highlight: $select.search" formation-id="source-rack-name-0">VIK6R01</span>
</div>
</div>
<!-- end ngIf: $select.open -->
<!-- end ngRepeat: rack in $select.items -->
<!-- ngIf: $select.open -->
<div class="ui-select-choices-row ng-scope" role="option" ng-class="{active: $select.isActive(this), disabled: $select.isDisabled(this)}" 
            ng-repeat="rack in $select.items" ng-if="$select.open" ng-click="$select.select(rack,$select.skipFocusser,$event)" style="">
<div class="option ui-select-choices-row-inner" data-selectable="" uis-transclude-append="">
<span class="ng-binding ng-scope" ng-bind-html="rack | highlight: $select.search" formation-id="source-rack-name-1">VIK6R02</span>
</div>
</div>
......

Манипуляции с WebElement --> String после не работают driver.findElement не работатет корректно со String 

Как вообще возможно после открытия DropBox прочитать его размер, чтобы потом заполнить List  [ не используя  driver.findElement(xpath); ]

 

Есть ли решение со стороны Selenium?


Использовать часть элементов из List<WebElement> c click()

07 сентября 2018 - 20:12

Камрады!

 

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

кроме ПЕРВОГО и соотвтетсвенно произвести Asserts для каждгого выбранного эдемента. (по нескольким позициям)

Логика выпадаюзего списка - это фильтрация, которая имеет свой pattern и конечное значение (Integer)

 

post-47229-0-24002500-1536350435_thumb.j

 

Code HTML:  (активного элемента)

<div class="ui-select-container selectize-control single ng-not-empty ng-valid ng-touched ng-dirty ng-valid-parse" ng-class="{'open': $select.open}" 
     theme="selectize" ng-model="ctrl.filter.rack.value" on-select="ui.addFilter('rack', ctrl.filter.rack.value)" style="">
<div class="selectize-input selectize-focus" ng-class="{'focus': $select.open, 'disabled': $select.disabled, 'selectize-focus' : $select.focus}" 
     ng-click="$select.open && !$select.searchEnabled ? $select.toggle($event) : $select.activate()" style="">
<div class="ui-select-match ng-scope" ng-hide="$select.searchEnabled && ($select.open || $select.isEmpty())" style="">
     <span class="ui-select-placeholder text-muted ng-binding ng-hide" ng-show="!$select.searchEnabled && ($select.isEmpty() || $select.open)"/>
     <span class="" ng-hide="$select.isEmpty() || $select.open" ng-transclude="" style="">FIX35R01</span>
</div>
<input class="ui-select-search ui-select-toggle ng-pristine ng-valid ng-empty ng-touched ng-hide" autocomplete="off" tabindex="-1" 
     ng-class="{'ui-select-search-hidden':!$select.searchEnabled}" ng-click="$select.toggle($event)" placeholder="" ng-model="$select.search" 
     ng-hide="!$select.isEmpty() && !$select.open" ng-disabled="$select.disabled" aria-label="Select box" style="width: 190px;" type="search"/>
</div>

Code (Java - Selenium)

    @Step(description = "filter all Racks Cables assertion")
    public  void assertAllCablesInRacks() {
        List<WebElement> rackElements = driver.findElements(CablingElements.RACK_FILTER_LIST);  //4 elements

        for (WebElement webElement : rackElements) {
            clickRackFilter();
            driver.findElement((By) webElement).click();
            assertFilterCables();
        }
    }

    @Step(description = "filter single Rack cables assertion")
    public void assertFilterCables() {
        commonWebSteps.waitForElementToBeVisible(CablingElements.CABLES_NUMBER);
        Integer actualRackFilterCount =  commonWebSteps.getNumberFromElement(CablingElements.CABLES_NUMBER);
        String actualRackName = commonWebSteps.getNameFromElement(CablingElements.RACK_TITLE);

        Integer expectedRackFilterCount =  cableRackFilterCount();
        String expectedRackName = commonWebSteps.getNameFromElement(CablingElements.RACK_FILTER_TAG);

        assertThat(actualRackFilterCount).as("<---------- Assert Cabling Filter count is failed ---------> " + actualRackFilterCount)
                .isEqualTo(expectedRackFilterCount);

        assertThat(actualRackName).as("<---------- Assert Cabling Filter name is failed ---------> " + actualRackName)
                .isEqualTo(expectedRackName);
    }



Проблемы:

 

1.  Из списка выпадающего dropbox мне нужно выбирать по очереди в цикле все элементы, кроме первого (default) 

     В первом методе, WebElement webElement : rackElements

    ---> Как при таком определении, правильно и корректно оформить пробег по всем элементам, кроме ПЕРВОГО

 


Прочитать текст из "Disabled" Input form

31 июля 2018 - 14:15

Камрады!

 

Есть вот такая форма UI:

 

Прикрепленный файл  SH_27 Jul. 31 16.46.jpg   9,65К   1 Количество загрузок:

 

с вот таким вот HTML кодом FE:

<div class="sw-select ng-scope" ng-if="ctrl.showTabs" style="">

   <input class="ng-pristine ng-untouched ng-valid ng-not-empty ng-valid-required ng-valid-pattern" name="zoneName" ng-model="ctrl.newZone.zoneName" ng-pattern="/^LOL[1-9][0-9]?$/i" ng-required="true" ng-disabled="ctrl.showTabs" required="required" disabled="disabled" type="text"/>
     <div class="sw-select-list">
       <!-- ngRepeat: site in ctrl.allAvailableZoneNames | filter: ctrl.newZone.zoneName | limitTo:10 -->
       <div class="sw-select-item ng-binding ng-scope" ng-repeat="site in ctrl.allAvailableZoneNames | filter: ctrl.newZone.zoneName | limitTo:10" ng-click="ctrl.newZone.zoneName = site">   LOL25 </div>
         <!-- end ngRepeat: site in ctrl.allAvailableZoneNames | filter: ctrl.newZone.zoneName | limitTo:10 -->
       </div>
     <div class="sw-select-error">
</div>

Задача: Прочитать содержимое "disable" input формы и передать в String

 

Код:

xpath:
public static final By ZONE_FORM_NAME = By.xpath("//div[@ng-if='ctrl.showTabs']");


String actualZoneName = driver.findElement(NewZoneElements.ZONE_FORM_NAME).getAttribute("value");
Возвращает null

String actualZoneName = driver.findElement(NewZoneElements.ZONE_FORM_NAME).getText();
ничего не возращает

Как можно это прочитать?