线程“main”中的异常org.openqa.selenium.NoSuchElementException:无法定位元素

时间:2016-08-03 09:31:13

标签: java selenium xpath

我正在尝试使用Selenium Webdriver和Java识别元素(文本框)。但是,它给了我无法找到元素异常。元素的id不变。这是HTML代码:

<div>
    <table id="searchIdText">
        <tbody>
            <tr id="searchIdText-inputRow">
                <td id="searchIdText-labelCell"><label
                    id="searchIdText-labelEl"> Search By Id <span
                        role="separator">:</span>
                </label></td>
                <td id="searchIdText-bodyEl"><input id="searchIdText-inputEl"
                    type="text" autocomplete="off" name="searchIdText-inputEl" size="1"
                    role="textbox" style="width: 100%; height: 20px;" /></td>
            </tr>
        </tbody>
    </table>
</div>

我想要的元素是ID searchIdText-inputEl 的文本框。我试过了:

driver.findElement(By.xpath(".//*[@id='searchIdText-inputEl']"));

driver.findElement(By.name("searchIdText-inputEl"))` 

以及:

driver.findElement(By.id("searchIdText-inputEl"));

但他们都没有工作。我也尝试了等待和Thread.sleep。他们都没有工作。此外,更改HTML代码不是一个选项。除了这些之外的所有建议都是受欢迎的。谢谢!

Java代码段如下。作为一种绝望的衡量标准,我将它们同时添加了Explicit Wait和Thread.sleep,因为它们都未能单独给出结果。但是,它仍然毫无用处。

WebDriver driver = new FirefoxDriver();
WebElement element = null;
WebDriverWait wait = new WebDriverWait(driver, 30);
driver.get(url);
Thread.sleep(60000);
element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(".//*[@id='searchIdText-inputEl']"));
element.sendKeys("ABC");

1 个答案:

答案 0 :(得分:0)

原来,有一个iFrame,它被隐藏了,并且在页面加载时控件被转移到了iFrame。我换了它,现在它工作正常。