Использование Python / Selenium для выбора флажков на угловом веб-сайте - PullRequest
0 голосов
/ 06 декабря 2018

Вот угловой источник

Попытка создать простой скрипт, который проверяет / снимает отметку с некоторых полей с помощью python / selenium.

Я выбросил ту маленькую книжку, которая у меня есть, и не могу заставить ее правильно идентифицировать элементы.Я пробовал (вероятно, неправильно) css, xpath, label, text.

Любая помощь будет принята с благодарностью.

Пробный код:

driver.find_elements_by_class_name('list-group-items')[1].click()

HTML:

<div class="col-sm-12">
<fieldset>
  <legend>
    Step 2: Choose Data fields
  </legend>
  <div class="col-sm-5 col-lg-4">

    <div class="panel minimal minimal-gray">

      <div class="panel-title">
        <h4>
          Standard Fields:
        </h4>
      </div>

      <ul class="list-group scrollable ng-scope" id="standard-fields" ng-class="{error: ctrl.export.errors.columns}">
        <!-- ngRepeat: item in ctrl.exportFormats.columns track by item.code --><li ng-repeat="item in ctrl.exportFormats.columns track by item.code" class="list-group-item ng-binding ng-scope list-group-item-success" ng-class="{'list-group-item-success' : item.checked}">
          <input type="checkbox" ng-model="item.checked" class="ng-pristine ng-untouched ng-valid">
          &nbsp;&nbsp;Date
        </li><!-- end ngRepeat: item in ctrl.exportFormats.columns track by item.code --><li ng-repeat="item in ctrl.exportFormats.columns track by item.code" class="list-group-item ng-binding ng-scope list-group-item-success" ng-class="{'list-group-item-success' : item.checked}">
          <input type="checkbox" ng-model="item.checked" class="ng-pristine ng-untouched ng-valid">
          &nbsp;&nbsp;Time
        </li><!-- end ngRepeat: item in ctrl.exportFormats.columns track by item.code --><li ng-repeat="item in ctrl.exportFormats.columns track by item.code" class="list-group-item ng-binding ng-scope list-group-item-success" ng-class="{'list-group-item-success' : item.checked}">

1 Ответ

0 голосов
/ 07 декабря 2018

Кажется, ты был довольно близко.В соответствии с вашими испытаниями кода вместо find_elements_by_class_name('list-group-items')[1], использование find_element_by_class_name('list-group-item') сделало бы вас ближе.

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

  • Дата :

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//li[@class='list-group-item ng-binding ng-scope list-group-item-success' and contains(@ng-repeat,'exportFormats')][contains(.,'Date')]/input[@class='ng-pristine ng-untouched ng-valid']"))).click()
    
  • Время :

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//li[@class='list-group-item ng-binding ng-scope list-group-item-success' and contains(@ng-repeat,'exportFormats')][contains(.,'Time')]/input[@class='ng-pristine ng-untouched ng-valid']"))).click()
    
  • Примечание : необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...