2012-11-28 38 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

首先是嘗試使用一些方法:

public boolean isElementPresent(By selector) 
    { 
     return driver.findElements(selector).size()>0; 
    } 

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

那麼如果你的頁面不使用一些等待機制compeltely呈現嘗試:

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注射: 1)如果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)通過DOM模型中定位所需元件: 例如

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驗證(插件到Firefox中的Firebug): enter image description here

+0

感謝您的解決方案。 使用jQuery解決方案我能夠解決問題,但還有一個問題是cssSelector值是動態的。我在這種情況下嘗試使用xpath,但沒有用,只是提到沒有顯示錯誤消息。請讓我知道,如果我們可以處理動態的CSS。 – deactivate

+0

好。你能澄清你提到的cssSelector值是動態的嗎? 據我可以看到你的問題 - 你的元素的CSS選擇器是String cssSelector =「img [src ='close.jpg']」,這個css選擇器嚴格定義你的web元素。 –