我想测试一个javaEE应用服务器,我想用Selenium测试它,当Selenium连接时他必须通过一个登录页面,但是这个登录页面的形式是隐藏的所以我试图输入文本与Selenium隐藏属性的表单。
<form hidden name="formLogin" method="POST" action="/app/">
<input type="hidden" name="home" value="true">
</form>
<form hidden name="formLogout" method="POST" action="/app/">
<input type="hidden" name="home" value="false">
</form>
在阅读了这篇文章post on how to force selenium to locate the hidden field之后,我认为我有解决方案,但它开始让我发疯。
我有以下代码:
public class SeleniumTestKheops {
static WebDriver driver;
static Wait<WebDriver> wait;
public static void main(String[] args) throws InterruptedException {
driver = new FirefoxDriver();
wait= new WebDriverWait(driver, 30);
final String url = "https://localhost:8444/app/";
try {
driver.navigate().to(url);
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.getElementsByName('formLogin')[0].checked = true;");
js.executeScript("document.getElementsByName('formLogout')[0].checked = true;");
driver.findElement(By.xpath("//input")).clear();
driver.findElement(By.xpath("//input")).sendKeys("root");
driver.findElement(By.xpath("//div[2]/div/div/input")).clear();
driver.findElement(By.xpath("//div[2]/div/div/input")).sendKeys("pass");
driver.findElement(By.xpath("//a[contains(@href, '#')]")).click();
} finally {
//driver.close();
}
}
}
但是当我多次运行它时,结果会有所不同,有时它会起作用,而且大多数时候我都会这样做:
线程“main”中的异常org.openqa.selenium.ElementNotVisibleException:元素当前不可见,因此可能无法与
进行交互
我不明白这个的含义,我敢肯定,为什么这个随机有效?我做错了什么?
编辑1:我编辑了代码,我很确定。当我垃圾邮件运行此代码时,它可以运行1次5次。我还是不知道为什么。我正在寻找一种方法来检查页面上可见的所有元素。
答案 0 :(得分:0)
看起来你的xpath选择器太笼统了。
您可以使用
等待元素可见wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//valid/xpath"))));
我很困惑你在你的方法中尝试做什么。您的Java代码与您提供的html不匹配。请提供更完整的html示例。
使用您当前的Java代码,您可以等待所有这样的元素:
// define reusable Bys
By usernameInput = By.xpath("//input");
By passwordInput = By.xpath("//div[2]/div/div/input");
By submitButton = By.xpath("//a[contains(@href, '#')]");
// wait for all elements to be visible
wait.until(ExpectedConditions.visibilityOfElementLocated(usernameInput));
wait.until(ExpectedConditions.visibilityOfElementLocated(passwordInput));
wait.until(ExpectedConditions.visibilityOfElementLocated(submitButton));
// clear username field and type username
driver.findElement(usernameInput).clear();
driver.findElement(usernameInput).sendKeys("root");
// clear password field and type password
driver.findElement(passwordInput).clear();
driver.findElement(passwordInput).sendKeys("pass");
// submit the form
driver.findElement(submitButton).click();