2013-08-03 192 views
0

我想通过Selenium和java(使用Firefox作为浏览器和Ubuntu作为操作系统)解析和操作一些数据。元素不可见

的HTML代码:

... 
<div id="someName1"> 
    <div id="someName2"> 
    <div id="someName3"> 
     <a class="sendMessegeLink" onclick="open_win(...)" title="someText1"> 
     <img style="padding-left:5px; vertical-align:middle" src="..."/> 
     someText1 
     </a> 
    </div> 

    <table class="areaTable"> 
     <tbody> 
     <tr> 
      <tr> 
      <tr class="someName4"> 
       <td colspan="4"> 
       <div id="SomeUniqueId" class="someName5" style="display: block;"> 
        <table class="someName6"> 
        <tbody> 
         <tr> 
         <tr> 
          <td colspan="2"> 
          <a class="sendMessegeLink" onclick="open_iframe('...)" title="someText2"> 
           <img style="padding-left:5px; vertical-align:middle" src="..."/> 
           <!-- WANTED ("not currently visible") ELEMENT -->someText2 
          </a> 
          <span class="remark"> someText3</span> 
          </td> 
         </tr> 
         </tr> 
        </tbody> 
        </table> 
       </div> 
       </td> 
      </tr> 
      </tr> 
     </tr> 
     </tbody> 
    </table> 
    </div> 
</div> 
...   

我一直在试图点击元素类的 “someText2” “sendMessegeLink” 有:

WebElement inputElement = driver.findElement(By.xpath(".//*[@id='SomeUniqueId']/table/tbody/tr[2]/td/a")); 

比:

WebElement inputElement = driver.findElement(By.cssSelector(".personalDetailsTable .sendMessegeLink")); 

并通过操纵DOM disp在一切情况下访问元素在DOM未加载(除了driver.manage().timeouts().implicitlyWait(sec, TimeUnit.SECONDS)我使用之前

javascriptExecutor js = (JavascriptExecutor) driver; 
WebElement w = (WebElement) js.executeScript("return document.getElementByClassName('sendMessegeLink').removeAttribute('display');"); 
只是 Thread.sleep(5000)

,最后:打好属性(读this后)。

我得到Element is not currently visible and so may not be interacted with

回答

2

试试这个

WebElement tmpElement= driver.findElement(elementLocator); // Try all your combination here 
JavascriptExecutor executor = JavascriptExecutor)driver; 
executor.executeScript(“arguments[0].click();”, tmpElement);