1

我想在下面的代碼中選擇應用按鈕。有兩個按鈕,只有一個按鈕是可見的。如何使用XPath或CSS選擇可見元素?

//input[@value='Apply' and @id='btn' and @name='btn' and not(ancestor::td[contains(@style,'display:none')])] 

我上面寫的XPath選擇一個可見,但在Web驅動程序,它說無法訪問的元素。 (瀏覽器 - IE8)

<table class="ColumnTable" cellspacing="0"> 
    <tbody> 
     <tr> 
     <td> 
      <div id="dashboard~120" class="Section" style="" headeron="" minimized="false" rendered="false"> 
       <table class="SectionT" cellspacing="0" cellpadding="0"> 
        <tbody> 
        <tr> 
         <td style=" display:none;"> 
          <div id="dashboard~Contents" style=""> 
           <table style="width:100%"> 
           <tbody> 
            <tr height="100%"> 
             <td class="EItem" valign="TOP" align="CENTER" colspan="2" style=""> 
              <div id="EmbedViewd" reloadinline=""> 
              <div id="NavDone" style="display:;"> 
               <div id="Result" result="Prompt"> 
                <table class="ViewTable" cellspacing="0"> 
                 <tbody> 
                 <tr> 
                  <td> 
                   <div id="newLayout"> 
                    <form style="margin: 0;" method="post" action="javascript:void(null);"> 
                    <div style=""> 
                     <table class="PromptView" style=""> 
                      <tbody> 
                       <tr> 
                       <td class="ButtonsCell"> 
                        <input id="btn" class="button" type="button" tabindex="0" value="Apply" name="btn" style="background-color: rgb(240, 240, 240);"> 
                       </td> 
                       </tr> 
                      </tbody> 
                     </table> 
                    </div> 
                    </form> 
                   </div> 
                  </td> 
                 </tr> 
                 </tbody> 
                </table> 
               </div> 
              </div> 
              </div> 
             </td> 
            </tr> 
           </tbody> 
           </table> 
          </div> 
         </td> 
        </tr> 
        </tbody> 
       </table> 
      </div> 
     </td> 
     </tr> 
     <tr> 
     <td> 
      <div id="dashboard~121" class="Section" style="" headeron="true" minimized="false" rendered="false"> 
       <table class="SectionT" cellspacing="0" cellpadding="0"> 
        <tbody> 
        <tr> 
         <td> 
          <div id="dashboard~Contents" style=""> 
           <table class="SectionTD" style="width:100%; border-top:none;"> 
           <tbody> 
            <tr height="100%"> 
             <td class="EItem" valign="TOP" align="CENTER" colspan="2" style=""> 
              <div id="EmbedViewd" reloadinline=""> 
              <div id="NavDone" style="display:;"> 
               <div id="Result" result="Prompt"> 
                <table class="ViewTable" cellspacing="0"> 
                 <tbody> 
                 <tr> 
                  <td> 
                   <div id="newLayout"> 
                    <form style="margin: 0;" method="post" action="javascript:void(null);"> 
                    <div style=""> 
                     <table class="PromptView" style=""> 
                      <tbody> 
                       <tr> 
                       <td class="ButtonsCell"> 
                        <input id="btn" class="button" type="button" tabindex="0" value="Apply" name="btn" style="background-color: rgb(240, 240, 240);"> 
                       </td> 
                       </tr> 
                      </tbody> 
                     </table> 
                    </div> 
                    </form> 
                   </div> 
                  </td> 
                 </tr> 
                 </tbody> 
                </table> 
               </div> 
              </div> 
              </div> 
             </td> 
            </tr> 
           </tbody> 
           </table> 
          </div> 
         </td> 
        </tr> 
        </tbody> 
       </table> 
      </div> 
     </td> 
     </tr> 
    </tbody> 
</table> 

我的問題是有無論如何其他解決這個問題。我認爲有很多方法可以編寫上述xpath,我是對嗎?

回答

0

我對你的問題有點困惑。

如果您嘗試選擇按鈕以便通過CSS修改其樣式,只需在CSS文件中創建適當的條目併爲HTML元素(您需要的按鈕)創建一個ID。

實例W3: Select HTML element by ID

1

你可以嘗試的情況下,下面這是硒的問題:

//input[@value='Apply'][@id='btn'][@name='btn'] 
     [not(ancestor::td[contains(@style,'display:none')])] 

這是相同的表達具有相同的結果,但這裏提到Xpath does not work with Selenium這是可能的Selenium在XPath中評估and時遇到問題。

另一個我只想提及的問題是,你不應該使用相同的id多個元素,id應該是唯一的。否則,您的HTML無效。當您將id更改爲唯一值時,可以減少XPath匹配條件。

0

使用XPath選擇的一種元素:

選擇第一個元素:

//div[@id='dashboard~120']descendant::input[@id='btn'].Click ;

選擇第二元件:

//div[@id='dashboard~121']descendant::input[@id='btn'].Click;