2013-02-13 38 views
0

我很難檢索元素的文本,出於某種原因WebDriver可以找到元素,但它無法檢索文本,我懷疑因爲由於某種原因WebDriver看不到這個元素,我馬上就會明白這一點。WebElement getText()返回空字符串,即使元素可見

這裏是HTML的一個片段:

<td id="x-auto-4169" class="x-grid3-col x-grid3-cell x-grid3-td-badCalls " style="width:53px;" role="gridcell"> 
    <div class="x-grid3-cell-inner x-grid3-col-badCalls" unselectable="on">0</div> 
</td> 

中的XPath去,這是

String valueXpath = "((//div[@id=\"QosDashpardPanelBottom\"]//div[@id=\"CollectorQoSPerformanceMetricsgrid\"]//div[contains(@class, \"x-grid3-row x-unselectable-single\")])[" + j + "]//div)[" + i + "]"; 
WebElement value = driver.findElement(By.xpath(valueXpath)); 

其中「J」是行號和「我」是列數分別爲一張桌子/網格。我知道,硒能找到的元素,因爲我可以做

WebElement class = driver.findElement(By.xpath(fullXpath)); 
String classAttr = arg.getAttribute("class"); 

和我回

x-grid3-cell-inner x-grid3-col-badCalls 

但是當我嘗試

String cellValue = value.getText(); 
System.out.println(cellValue); 

我得到一個空字符串。我盯着我的電腦屏幕,我可以看到它的價值,它是可見的,我知道Selenium找到了這個元素,但我無法檢索文本。有趣的是有人建議的價值第一次點擊,然後嘗試的getText(),所以,當我試圖點擊我得到了異常:

org.openqa.selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with 

所以我想知道如果我不能夠檢索的文本價值,因爲它不可見?但是,如果是這種情況,我可以檢索類屬性,標籤等,但不是文本值,這似乎很奇怪。

任何建議將不勝感激。

HTML:

<body class=" ext-gecko ext-windows" onload="processLoaders();"> 
<script type="text/javascript"> 
<div id="topNavDiv" style="height: 90px"> 
<div id="bodyContentOuter" style="width: 1280px; height: 587px;"> 
    <div id="bodyContentInner"> 
     <script src="RLT/RLT.nocache.js" language="javascript" type="text/javascript"> 
     <script defer="defer"> 
     <script language="javascript" type="text/javascript"> 
     <div id="rtcpMain" class=" x-component x-border-layout-ct" style="width: 1280px; height: 587px;"> 
      <div id="rtcpMainWest" class=" x-panel x-component x-border-panel" style="left: 5px; top: 5px; width: 225px;"> 
      <div id="x-auto-2" class=" x-tab-panel x-component x-border-panel" tabindex="0" hidefocus="true" style="left: 235px; top: 5px; width: 1040px;"> 
       <div class="x-tab-panel-header x-unselectable" style="width: 1038px;" unselectable="on"> 
       <div class="tone-rtcp-tabbed-content-panel" style="width: 1040px; height: 550px;"> 
        <div id="x-auto-10" class=" x-component" style="overflow: auto; width: 1040px; height: 550px;"> 
         <div id="QosDashboardPanel0" class=" x-panel x-component" style="width: 1040px;"> 
          <div id="x-auto-13" class=" x-small-editor x-panel-header x-component x-hide-display" role="presentation"> 
          <div id="rtcpDPBWrap" class="x-panel-bwrap" role="presentation" style="overflow: visible;"> 
           <div class="x-panel-tbar x-panel-tbar-noheader" role="presentation" style="width: 1040px;"> 
           <div id="rtcpDPBody" class="x-panel-body x-panel-body-noheader x-border-layout-ct" role="presentation" style="width: 1038px; height: 700px;"> 
            <div id="QosDashboardPanelTop" class=" x-component x-border-panel x-border-layout-ct" style="left: 0px; top: 0px; width: 1038px; height: 400px;"> 
            <div id="QosDashpardPanelBottom" class=" x-component x-border-panel x-border-layout-ct" style="left: 1px; top: 401px; width: 1036px; height: 298px;"> 
             <div id="QosDashpardPanel_pqosChartsLC" class=" x-component x-border-panel x-border-layout-ct x-hide-display" style="left: 0px; top: 0px; width: 1036px; height: 400px;"> 
             <div id="QosDashpardPanel_metricsTablesLC" class=" x-component x-border-panel x-border-layout-ct" style="left: 1px; top: 1px; width: 1034px; height: 296px;"> 
              <div id="CollectorMetrics_toneletWrapper" class=" x-panel x-component x-border-panel" style="left: 1px; top: 1px; width: 330px;"> 
               <div id="x-auto-99" class=" x-small-editor x-panel-header x-component x-hide-display" role="presentation"> 
               <div class="x-panel-bwrap" role="presentation"> 
                <div class="x-panel-body x-panel-body-noheader" role="presentation" style="width: 328px; height: 292px;"> 
                 <div id="CollectorMetrics" class=" x-panel x-component" style="width: 328px;"> 
                  <div id="x-auto-109" class=" x-small-editor x-panel-header x-component x-unselectable" role="presentation" unselectable="on"> 
                  <div class="x-panel-bwrap" role="presentation"> 
                   <div class="x-panel-body" role="presentation" style="width: 326px; height: 265px;"> 
                    <div id="CollectorQoSPerformanceMetricsgrid" class=" x-grid-panel x-component" style="position: relative; width: 326px; height: 265px;" tabindex="0" hidefocus="true" unselectable=""> 
                     <div class="x-grid3" role="presentation" style="width: 326px; height: 265px;"> 
                      <div class="x-grid3-viewport" role="presentation"> 
                       <div class="x-grid3-header" role="presentation"> 
                       <div class="x-grid3-scroller" role="presentation" style="width: 326px; height: 243px;"> 
                        <div class="x-grid3-body" role="presentation"> 
                         <div id="CollectorQoSPerformanceMetricsgrid_x-auto-633" class="x-grid3-row x-unselectable-single x-grid3-row-selected x-grid3-highlightrow " style="width:510px;"> 
                          <table class="x-grid3-row-table" cellspacing="0" cellpadding="0" border="0" style="width:510px;" role="presentation"> 
                           <tbody role="presentation"> 
                            <tr role="presentation"> 
                             <td id="x-auto-634" class="x-grid3-col x-grid3-cell x-grid3-td-name x-grid-cell-first " style="width:148px;" role="gridcell"> 
                              <div class="x-grid3-cell-inner x-grid3-col-name" unselectable="on"> 
                               <u>Lync</u> 
                              </div> 
                             </td> 
                             <td id="x-auto-635" class="x-grid3-col x-grid3-cell x-grid3-td-badCalls " style="width:53px;" role="gridcell"> 
                              <div class="x-grid3-cell-inner x-grid3-col-badCalls" unselectable="on">36</div> 
                             </td> 
                             <td id="x-auto-636" class="x-grid3-col x-grid3-cell x-grid3-td-totalCalls " style="width:58px;" role="gridcell"> 
                              <div class="x-grid3-cell-inner x-grid3-col-totalCalls" unselectable="on">120</div> 
                             </td> 
                             <td id="x-auto-637" class="x-grid3-col x-grid3-cell x-grid3-td-avgLatency " style="width:73px;" role="gridcell"> 
                              <div class="x-grid3-cell-inner x-grid3-col-avgLatency" unselectable="on">223</div> 
                             </td> 
                             <td id="x-auto-638" class="x-grid3-col x-grid3-cell x-grid3-td-avgLoss " style="width:53px;" role="gridcell"> 
                              <div class="x-grid3-cell-inner x-grid3-col-avgLoss" unselectable="on">0.80</div> 
                             </td> 
                             <td id="x-auto-639" class="x-grid3-col x-grid3-cell x-grid3-td-avgJitter " style="width:58px;" role="gridcell"> 
                              <div class="x-grid3-cell-inner x-grid3-col-avgJitter" unselectable="on">29</div> 
                             </td> 
                             <td id="x-auto-640" class="x-grid3-col x-grid3-cell x-grid3-td-avgMOS x-grid3-cell-last " style="width:53px;" role="gridcell"> 
                              <div class="x-grid3-cell-inner x-grid3-col-avgMOS" unselectable="on">3.86</div> 
                             </td> 
                            </tr> 
                           </tbody> 
                          </table> 
                         </div> 
                         <div id="CollectorQoSPerformanceMetricsgrid_x-auto-641" class="x-grid3-row x-unselectable-single " style="width:510px;"> 
                          <table class="x-grid3-row-table" cellspacing="0" cellpadding="0" border="0" style="width:510px;" role="presentation"> 
                           <tbody role="presentation"> 
                            <tr role="presentation"> 
                            <td id="x-auto-642" class="x-grid3-col x-grid3-cell x-grid3-td-name x-grid-cell-first " style="width:148px;" role="gridcell"> 
                             <div class="x-grid3-cell-inner x-grid3-col-name" unselectable="on"> 
                              <u>CUCM-Publisher</u> 
                             </div> 
                            </td> 
                            <td id="x-auto-643" class="x-grid3-col x-grid3-cell x-grid3-td-badCalls " style="width:53px;" role="gridcell"> 
                             <div class="x-grid3-cell-inner x-grid3-col-badCalls" unselectable="on">3</div> 
                            </td> 
                            <td id="x-auto-644" class="x-grid3-col x-grid3-cell x-grid3-td-totalCalls " style="width:58px;" role="gridcell"> 
                             <div class="x-grid3-cell-inner x-grid3-col-totalCalls" unselectable="on">52</div> 
                            </td> 
                            <td id="x-auto-645" class="x-grid3-col x-grid3-cell x-grid3-td-avgLatency " style="width:73px;" role="gridcell"> 
                             <div class="x-grid3-cell-inner x-grid3-col-avgLatency" unselectable="on">190</div> 
                            </td> 
                            <td id="x-auto-646" class="x-grid3-col x-grid3-cell x-grid3-td-avgLoss " style="width:53px;" role="gridcell"> 
                             <div class="x-grid3-cell-inner x-grid3-col-avgLoss" unselectable="on">0.79</div> 
                            </td> 
                            <td id="x-auto-647" class="x-grid3-col x-grid3-cell x-grid3-td-avgJitter " style="width:58px;" role="gridcell"> 
                             <div class="x-grid3-cell-inner x-grid3-col-avgJitter" unselectable="on">31</div> 
                            </td> 
                            <td id="x-auto-648" class="x-grid3-col x-grid3-cell x-grid3-td-avgMOS x-grid3-cell-last " style="width:53px;" role="gridcell"> 
                             <div class="x-grid3-cell-inner x-grid3-col-avgMOS" unselectable="on">3.98</div> 
                            </td> 
                            </tr> 
                           </tbody> 
                          </table> 
                         </div> 
                        </div>                           
+0

值得注意的是,getElement返回頁面上的第一個匹配元素。是否有可能獲得不可見的較早比賽? – Aurand 2013-02-13 00:14:32

+0

@Aurand如果我從valueXpath中獲取確切的Xpath,當然可以正確地替換i和j,然後使用螢火蟲嘗試它,它可以很好地工作,並獲得預期的元素。有沒有理由相信getElement會得到不同的結果? – 2013-02-13 00:18:07

+1

我認爲你的'xpath'可能是錯誤的。只需檢查兩次。否則,請發佈完整的HTMl代碼。 – Manigandan 2013-02-13 03:41:18

回答

1

後多(多)故障排除原來,我對我的Xpath稍有不慎。從我的html

<div id="QosDashboardPanel0" ... 

我沒有考慮多個選項卡。在我AUT我打開一個新標籤,而不是一個新的瀏覽器選項卡,但在應用程序本身就是一個標籤,整個HMTL將保持不變,除了片段上方將變爲

<div id="QosDashboardPanel1" ... 

我假設ID不會改變,很好的經驗教訓!這就是爲什麼我碰到'不能點擊不可見元素',這個元素實際上存在,但它隱藏在我的活動標籤後面。

沒有太多的解決方案,但我希望如果有人遇到類似的東西,至少指出他們在正確的方向或使鐘聲響起。