问题描述
初学者在这里问一个问题。
<input type="text" name="account_nbr" value="" maxlength="19"
autocomplete="off" class="mainTextBox" id="account_nbr" >
这是一些简单的HTML,这让我头疼。 我认为的问题是,此文本框包含在我从下拉菜单中选择信用卡类型后在页面上生成的EPX CC付款表单中。 它不在新窗口中或其他任何内容中。 这只是页面内生成的一种形式。
我试着等待使用:
public static WebElement textbox_CardNumber(WebDriver driver) {
WebDriverWait wait = new WebDriverWait(driver, 15);
element = wait.until(ExpectedConditions.elementToBeClickable(By.id("account_nbr")));
return element;
}
每次都超时。 我还尝试了其他几次使用不同的xpath的尝试,但是没有任何效果(投掷飞镖)。 我现在是硒和Java的新手,希望其他人遇到这样的问题。
1楼
通常,第三方提供的表单都位于iFrame中。 iFrame具有自己的DOM,与父页面的DOM分开。 由于Selenium直接在DOM上运行,因此不会在包含的iFrame中查找。
要查看内容,您必须使用Selenium切换到iframe的上下文。
一种实现方法是使用driver.switchTo()。 WebDriverWait还提供了一种不错的方法。
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("id or name of the iframe element"));
您可以随时使用driver.switchTo()。defaultContent()切换回使用页面的主DOM。