2016-12-19 47 views
0

我有一個4行4列的表格。有兩個按鈕位於最後2列:開始取消。我想按第二行/最後一列的取消按鈕。每行的代碼都是類似的...減去我嘗試啓動的服務名稱。使用跟隨同胞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 玩具服務2

行3 玩具服務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() 

我得到那個說

無法執行 '評估對' 文件的錯誤:字符串 // TD [包含(text(),玩具服務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") 

但是,我不因爲following-sibling::td將匹配<td class="ng-binding"> Toy Service 2 </td>之後的下一個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