2016-12-19 2 views
0

У меня есть таблица из 4 строк и 4 столбца. Есть две кнопки, которые находятся на последних двух столбцах: Начало и Отмена. Я хочу нажать кнопку «Отмена» для второго столбца/последнего столбца. Код для каждой строки похож ... минус имя службы, которое я пытаюсь запустить.Нажмите кнопку внутри таблицы, используя следующий-сиблинг PYTHON

<table class="table"> 
    <tbody> 
     ---this is the first row--- 
     <tr ng-repeat="toyService in theService" ng-class="{'text-muted':toyservice.notFound" class="ng-scope"> 
     --- this is the second row.. the row I am trying to start---- 
     <tr ng-repeat="toyService in theService" ng-class="{'text-muted':toyservice.notFound" class="ng-scope"> 
      <td style="text-align:center">...</td> 
      <td class="ng-binding"> Toy Service 2 </td> 
      <td class="ng-binding">...</td> 
      <td class="toy-service-button-panel text-right"> 
       ----the first button (Start Button) 
       <button type="submit" class="btn btn-info">...</button> 
       ----the button I am trying the click (Cancel) 
       <button type="submit" class="btn btn-success btn-sm" 
        <span title="Cancel Service">..</span> 

Каждая строка имеет один и тот же код минус имя службы:

строка 1 Игрушки Услуга 1

строки 2 Toy Service 2

строка 3 Toy Service 3

ряд 4 игрушки Сервис 4

То, что я попытался было:

driver.find_element_by_xpath("//td[contains(text(), 'Toy Service 2')]/follow-sibling::td").find_element_by_css_selector("td[class='toy-service-button-panel.text-right']").find_element_by_css_selector("button[class='btn.btn-success.btn-sm']").click() 

Я получаю сообщение об ошибке:

Не удалось выполнить 'оценку на' Документ: Строковое // тд [содержит (text(), Toy Service 1 ')]/follow-sibling :: td' не является действительным выражением XPath .

Я пробовал различные методы, но я не могу нажать эту кнопку Отмена на строке 2

ответ

1

Это не follow-sibling, это following-sibling:

driver.find_element_by_xpath("//td[contains(text(), 'Toy Service 2')]/following-sibling::td") 

Но, я не» t думаю, что ваш подход будет работать, так как following-sibling::td будет соответствовать самым следующим td элементам после <td class="ng-binding"> Toy Service 2 </td>, который не содержит нужную кнопку.

Вместо этого, я бы первым выяснить tr элемент, который вы хотите работать с:

row = driver.find_element_by_xpath("//tr[td[contains(., 'Toy Service 2')]]") 

Тогда, я бы работать в этой строке:

row.find_element_by_css_selector("td.toy-service-button-panel button.btn.btn-success").click() 

Я также упрощены селекторов немного, нет необходимости проверять полные значения атрибутов class - вы можете проверить отдельные классы с помощью точечной нотации.

+0

спасибо. Это работает лучше. – royalblue

Смежные вопросы