Selenium webdriver:org.openqa.selenium.InvalidElementStateException:元素被禁用,因此不能用于操作

时间:2013-12-25 12:15:59

标签: java selenium selenium-webdriver

我在尝试写入selenium webdriver中的简单代码时会收到此错误,以便在Google搜索页面中输入值并输入。 以下是我的代码 - :

    WebDriver driver = new FirefoxDriver(profile);
    driver.manage().timeouts().implicitlyWait(40, TimeUnit.SECONDS);
    driver.get("http://www.google.com");

    WebElement element=driver.findElement(By.xpath("//input[@id='gs_htif0']"));
        boolean b = element.isEnabled();

    if (b){

        System.out.println("Enabled");
    }

    element.sendKeys("Test Automation");

    element.submit();

任何人都可以帮我解决这个问题吗?如何启用已禁用的元素?

5 个答案:

答案 0 :(得分:1)

您使用错误的“输入”输入文字。您应该使用以下XPath:

//input[@name='q']

WebElement element=driver.findElement(By.xpath("//input[@name='q']"));

这个'input'元素接受输入文本就好了。

答案 1 :(得分:0)

您可以尝试在页面上运行javascript:

((JavascriptExecutor) driver).executeScript("document.getElementById('gs_htif0').disabled = false");

((JavascriptExecutor) driver).executeScript("arguments[0].disabled = false", element);

答案 2 :(得分:0)

请参阅,如果这可能有帮助,

WebDriver driver = new FirefoxDriver(profile);

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

driver.get("http://www.google.com");

WebElement element = driver.findElement(By.name("q"));

if(element.isEnabled()) {
    System.out.println("Enabled");
    element.sendKeys("Test Automation");
    element.submit();
}

答案 3 :(得分:0)

试试这个:

WebDriverWait wait = new WebDriverWait(driver, 40);
driver.get("http://www.google.com");

wait.until(ExpectedConditions.visibilityOfElementLocated(By
                .xpath("//input[@id='gs_htif0']")));
driver.findElement(By.xpath("//input[@id='gs_htif0']"))
                .sendKeys("Test Automation" + Keys.ENTER);

或者:

public boolean isElementPresent(WebDriver driver, By by)
{
try {
            driver.findElement(by);
            System.out.print("Enabled");
            return true;
          } catch (NoSuchElementException ignored) {  
            return false;
          }
}

isElementPresent = isElementPresent(
                driver, By.xpath("//input[@id='gs_htif0']"));
if (isElementPresent) { 
    element.sendKeys("Test Automation");
    element.submit();
 }

或者将xPath更改为名称选择器。

答案 4 :(得分:0)

如果我是正确的,那么你在firefox驱动程序中使用firebug附加组件来获取搜索框的路径。但是,萤火虫似乎提供了一个搜索框的Id不正确的路径。如果使用inspect元素选项,您可以看到差异(在下图中,您可以自己发现差异)。

image.