Selenium - isElementPresent返回true但无法单击该元素

时间:2012-11-28 11:59:36

标签: selenium webdriver

我有一个场景可以点击叠加层中的“X”图标。当我使用 selenium.isElementPresent(“// img [@src ='close.jpg']”)检查元素时;它正在回归真实。但是当我执行 selenium.click(“// img [contains(@ src,'close.jpg')]”);动作它会引发异常“元素当前不可见,因此可能无法与之交互。”

尝试使用所有类型的xpath,但无法解决问题。

1 个答案:

答案 0 :(得分:3)

首先尝试使用几种方法:

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注入: 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模型定位所需元素: e.g。

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());
    }

尝试逐步调试以确切了解问题所在。 希望它可以帮到你。

此外,我建议您在firepath中验证找到的css选择器和xpath验证(在firefox中添加到firebug): enter image description here