我正在尝试使用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");
答案 0 :(得分:0)
原来,有一个iFrame,它被隐藏了,并且在页面加载时控件被转移到了iFrame。我换了它,现在它工作正常。