2012-11-28 19 views
0

오버레이에서 'X'아이콘을 클릭하는 시나리오가 있습니다. 을 사용하여 요소를 검사 할 때 selenium.isElementPresent ("// img [@ src = 'close.jpg']"); 그것은 사실로 돌아오고 있습니다. 하지만 수행 할 때 selenium.click ("// img [contains (@ src, 'close.jpg')]"); 조치는 "요소가 현재 보이지 않으므로 상호 작용할 수 없습니다"라는 예외를 발생시킵니다.Selenium - isElementPresent는 true를 반환하지만 요소를 클릭 할 수 없습니다.

모든 유형의 xpath로 시도했지만 문제를 해결할 수 없습니다. 모든

+0

은 html 코드를 보여? –

+1

어떤 브라우저를 사용하고 있습니까? 나는 IE에서이 문제를 안다. Firefox에서 제대로 작동합니까? –

+0

Firefox에서 문제가 발생했습니다. – deactivate

답변

3

첫 번째 방법 중 몇 가지를 사용해보십시오 :

페이지가 compeltely 일부 대기 메커니즘을 사용하여 시도 렌더링되지 다음 경우
public boolean isElementPresent(By selector) 
    { 
     return driver.findElements(selector).size()>0; 
    } 

    public boolean isElementVisible(By selector){ 
     return driver.findElement(selector).isDisplayed(); 
    } 

: :

Thread.sleep(1000); 


driver.manage().timeouts().implicitlyWait(2,TimeUnit.SECONDS); 

메커니즘을 fluentWait.

public WebElement fluentWait(final By locator){ 
      Wait<WebDriver> wait = new FluentWait<WebDriver>(driver) 
        .withTimeout(30, TimeUnit.SECONDS) 
        .pollingEvery(5, TimeUnit.SECONDS) 
      .ignoring(org.openqa.selenium.NoSuchElementException.class); 
      WebElement foo = wait.until(
        new Function<WebDriver, WebElement>() { 
         public WebElement apply(WebDriver driver) { 
          return driver.findElement(locator); 
         } 
        } 
      ); 
      return foo;    }  ; 
    fluentWait(By.xpath(..blablabla...)).click(); 

또한 jsCode 주입 할 수 DOM 모델을 통해 필요한 소자의 위치가 jQuery를

String cssSelector="blablabla"; 
JavascriptExecutor js = (JavascriptExecutor) driver; 
     StringBuilder stringBuilder = new StringBuilder(); 
     stringBuilder.append("var x = $(\'"+cssSelector+"\');"); 
     stringBuilder.append("x.click();"); 
     js.executeScript(stringBuilder.toString()); 

2를 지원하는 경우) 1) 예컨대

String js="document.getElementsByTagName('div')[34].click();" 
jsCodeExecution(js); 
public void jsCodeExecution(String jsCode){ 
     JavascriptExecutor js = (JavascriptExecutor) driver; 
     StringBuilder stringBuilder = new StringBuilder(); 
     stringBuilder.append(jsCode); 
     js.executeScript(stringBuilder.toString()); 
    } 

단계별로 단계별로 디버깅 해보고 문제가있는 곳을 정확히 확인하십시오. 호프가 도움이되기를 바랍니다.

는 또한, 난 당신이 발견 CSS 선택기를 확인하고 XPath는 (파이어 폭스에 불을 지르고에 부가 기능을) firepath에 확인하는 것이 좋습니다 : enter image description here

+0

솔루션을 제공해 주셔서 감사합니다. jQuery 솔루션을 사용하여이 문제를 해결할 수 있지만 한 가지 더 많은 문제는 cssSelector 값이 동적이라는 것입니다. 이 경우에는 xpath를 사용했지만 사용하지 않으려 고 시도했지만 오류 메시지는 표시되지 않습니다. 역동적 인 CSS를 처리 할 수 ​​있는지 알려 주시기 바랍니다. – deactivate

+0

잘. cssSelector 값이 동적이라고 말하는 것에 대해 명확히 설명해 주시겠습니까? 지금까지 귀하의 질문에서 볼 수있는 귀하의 요소의 CSS 선택기는 String cssSelector = "img [src = 'close.jpg']"이며이 CSS 선택기는 엄격하게 웹 요소를 정의합니다. –

관련 문제