Robot Framework: Как создать список из тегов div - PullRequest
0 голосов
/ 30 октября 2018

Я хотел бы получить все тексты из этого списка ниже, чтобы создать список учетных записей:

<ul class="ui-select-choices ui-select-choices-content ui-select-dropdown dropdown-menu ng-scope" ng-show="$select.open &amp;&amp; $select.items.length > 0" repeat="tenant.id as tenant in tenants | filter:$select.search | orderBy: tenant.id" style="opacity: 1;">
	<li class="ui-select-choices-group" id="ui-select-choices-16">
		<div class="divider ng-hide" ng-show="$select.isGrouped &amp;&amp; $index > 0"></div>
		<div ng-show="$select.isGrouped" class="ui-select-choices-group-label dropdown-header ng-binding ng-hide" ng-bind="$group.name"></div>
		<!-- ngRepeat: tenant in $select.items -->
		<!-- ngIf: $select.open -->
		<div ng-attr-id="ui-select-choices-row-{{ $select.generatedId }}-{{$index}}" class="ui-select-choices-row ng-scope active" ng-class="{active: $select.isActive(this), disabled: $select.isDisabled(this)}" role="option" ng-repeat="tenant in $select.items" ng-if="$select.open" ng-click="$select.select(tenant,$select.skipFocusser,$event)" id="ui-select-choices-row-16-0" style="">
			<span class="ui-select-choices-row-inner" uis-transclude-append="">
				<div ng-bind-html="tenant.name | highlight: $select.search" class="ng-binding ng-scope">RF-Account</div>
			</span>
		</div>
		<!-- end ngIf: $select.open -->
		<!-- end ngRepeat: tenant in $select.items -->
		<!-- ngIf: $select.open -->
		<div ng-attr-id="ui-select-choices-row-{{ $select.generatedId }}-{{$index}}" class="ui-select-choices-row ng-scope" ng-class="{active: $select.isActive(this), disabled: $select.isDisabled(this)}" role="option" ng-repeat="tenant in $select.items" ng-if="$select.open" ng-click="$select.select(tenant,$select.skipFocusser,$event)" id="ui-select-choices-row-16-1" style="">
			<span class="ui-select-choices-row-inner" uis-transclude-append="">
            	<div ng-bind-html="tenant.name | highlight: $select.search" class="ng-binding ng-scope">RF-Account1</div>
            </span>
        </div>
        <!-- end ngIf: $select.open -->
        <!-- end ngRepeat: tenant in $select.items -->
        <!-- ngIf: $select.open -->
        <div ng-attr-id="ui-select-choices-row-{{ $select.generatedId }}-{{$index}}" class="ui-select-choices-row ng-scope" ng-class="{active: $select.isActive(this), disabled: $select.isDisabled(this)}" role="option" ng-repeat="tenant in $select.items" ng-if="$select.open" ng-click="$select.select(tenant,$select.skipFocusser,$event)" id="ui-select-choices-row-16-2">
        	<span class="ui-select-choices-row-inner" uis-transclude-append="">
            	<div ng-bind-html="tenant.name | highlight: $select.search" class="ng-binding ng-scope">RF-Account2</div>
            </span>
        </div>
        <!-- end ngIf: $select.open -->
        <!-- end ngRepeat: tenant in $select.items -->
        <!-- ngIf: $select.open -->
        <div ng-attr-id="ui-select-choices-row-{{ $select.generatedId }}-{{$index}}" class="ui-select-choices-row ng-scope" ng-class="{active: $select.isActive(this), disabled: $select.isDisabled(this)}" role="option" ng-repeat="tenant in $select.items" ng-if="$select.open" ng-click="$select.select(tenant,$select.skipFocusser,$event)" id="ui-select-choices-row-16-3">
        	<span class="ui-select-choices-row-inner" uis-transclude-append="">
            	<div ng-bind-html="tenant.name | highlight: $select.search" class="ng-binding ng-scope">RF-Account3</div>
            </span>
        </div>
        <!-- end ngIf: $select.open -->
        <!-- end ngRepeat: tenant in $select.items -->
    </li>
</ul>

Вот мое исследование:

!Choisir un autre compte
  Click Element    selectTenant
  ${listAccount}    Create List    
  ${idDynamicAccountList}    Get Element Attribute    //li[@class='ui-select-choices-group']    id
  ${rest}    ${group}    Split String From Right    ${idDynamicAccountList}    -    1
  ${maxAccount}    Get Element Count    //li[@class='ui-select-choices-group']//span
  :FOR    ${i}    IN RANGE    0    ${maxAccount}
  \    ${accountXpath}    Catenate    SEPARATOR=    //li[@id='${idDynamicAccountList}']//div[@id='ui-select-choices-row-    ${group}    -    ${i}    ']//span
  \    ${accountName}    Get Text    ${accountXpath}
  \    Append To List    ${listAccount}    ${accountName}
  Log List    ${listAccount}

В конце концов список пуст. Мне кажется, что проблема заключается в использовании ключевого слова «Получить текст», но я не знаю, почему.

Не могли бы вы, пожалуйста, помочь мне выполнить эти действия?

Спасибо

1 Ответ

0 голосов
/ 31 октября 2018

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

Я использую Python 3.7.0 и http.server для обслуживания ниже example.html на порту 7800, используя команду python -m http.server 7800 для запуска прослушивания веб-сервера на порту 7800

<html>
<body>

<ul 
... [snipped the rest of the provided HTML code]
</ul>

</body>
</html>

Файл робота содержит следующий скрипт:

*** Settings ***
Library    SeleniumLibrary    
Library    String    
Library    Collections    

Suite Teardown    Close All Browsers    

*** Test Cases ***
!Choisir un autre compte
  Open Browser    http://localhost:7800/example.html    Chrome

  # Click Element    selectTenant
  ${listAccount}    Create List    
  ${idDynamicAccountList}    Get Element Attribute    //li[@class='ui-select-choices-group']    id
  ${rest}    ${group}    Split String From Right    ${idDynamicAccountList}    -    1
  ${maxAccount}    Get Element Count    //li[@class='ui-select-choices-group']//span
  :FOR    ${i}    IN RANGE    0    ${maxAccount}
  \    ${accountXpath}    Catenate    SEPARATOR=    //li[@id='${idDynamicAccountList}']//div[@id='ui-select-choices-row-    ${group}    -    ${i}    ']//span
  \    ${accountName}    Get Text    ${accountXpath}
  \    Append To List    ${listAccount}    ${accountName}
  Log List    ${listAccount}

Обратите внимание, что я удалил Click Element, так как это создало проблему. При его отсутствии в журнале сообщений RED Eclipse Plugin генерируется следующий журнал и вывод:

Starting test: Folder.For-Loop.!Choisir un autre compte
20181031 20:42:55.279 : INFO : Opening browser 'Chrome' to base url 'http://localhost:7800/example.html'.
20181031 20:42:58.027 : INFO : ${listAccount} = []
20181031 20:42:58.083 : INFO : ${idDynamicAccountList} = ui-select-choices-16
20181031 20:42:58.085 : INFO : ${rest} = ui-select-choices
20181031 20:42:58.085 : INFO : ${group} = 16
20181031 20:42:58.116 : INFO : ${maxAccount} = 4
20181031 20:42:58.117 : INFO : ${accountXpath} = //li[@id='ui-select-choices-16']//div[@id='ui-select-choices-row-16-0']//span
20181031 20:42:58.198 : INFO : ${accountName} = RF-Account
20181031 20:42:58.199 : INFO : ${accountXpath} = //li[@id='ui-select-choices-16']//div[@id='ui-select-choices-row-16-1']//span
20181031 20:42:58.287 : INFO : ${accountName} = RF-Account1
20181031 20:42:58.293 : INFO : ${accountXpath} = //li[@id='ui-select-choices-16']//div[@id='ui-select-choices-row-16-2']//span
20181031 20:42:58.373 : INFO : ${accountName} = RF-Account2
20181031 20:42:58.377 : INFO : ${accountXpath} = //li[@id='ui-select-choices-16']//div[@id='ui-select-choices-row-16-3']//span
20181031 20:42:58.457 : INFO : ${accountName} = RF-Account3
20181031 20:42:58.463 : INFO : List length is 4 and it contains following items:
0: RF-Account
1: RF-Account1
2: RF-Account2
3: RF-Account3
Ending test: Folder.For-Loop.!Choisir un autre compte

И консоль, запускающая его в RED Eclipse Plugin:

Command: C:\Users\name\AppData\Local\Programs\Python\Python37\python.exe -m robot.run --listener C:\Users\name\AppData\Local\Temp\RobotTempDir7442861157430042777\TestRunnerAgent.py:60930 --argumentfile C:\Users\name\AppData\Local\Temp\RobotTempDir7442861157430042777\args_ede0037b.arg C:\Users\name\eclipse-workspace\Folder
Suite Executor: Robot Framework 3.0.4 (Python 3.7.0 on win32)
==============================================================================
Folder                                                                        
==============================================================================
Folder.For-Loop                                                               
==============================================================================
!Choisir un autre compte                                              | PASS |
------------------------------------------------------------------------------
Folder.For-Loop                                                       | PASS |
1 critical test, 1 passed, 0 failed
1 test total, 1 passed, 0 failed
==============================================================================
Folder                                                                | PASS |
1 critical test, 1 passed, 0 failed
1 test total, 1 passed, 0 failed
==============================================================================
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...