2013-08-03 3 views
0

Я пытаюсь разобрать и обработать некоторые данные через Selenium и java (используя Firefox в качестве браузера и Ubuntu как os).Элемент не отображается

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 лежал атрибут (после прочтения this):

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

и, наконец, просто Thread.sleep(5000) перед обращением к элементу в случае, если все не загружена в DOM (в дополнение к driver.manage().timeouts().implicitlyWait(sec, TimeUnit.SECONDS), которые я использую.

я 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); 
Смежные вопросы