能够在默认内容中找到元素。但是当我尝试在弹出的javascript中找到一个元素时,webdriver会挂起。我试过wait.until(ExpectedConditions)
,但没有用。我也试过了isDisplayed()
。但仍无法找到。这是我的编码:
WebElement LoginMbno=driver.findElement(By.xpath(".//*[@id='txtUserMobile']"));
if(LoginMbno.isDisplayed())
{
System.out.println("Avialable");
}
else
{
System.out.println("Not");
}
LoginMbno.sendKeys(new String[]{"9944097094"});
WebElement LoginPwd=driver.findElement(By.xpath(".//*[@id='txtPassword']"));
LoginPwd.sendKeys(new String[]{"123456"});
WebElement LoginBtn=driver.findElement(By.xpath(".//*[@id='btnLogin']"));
LoginBtn.click();
答案 0 :(得分:0)
注意:我没有更正ID或其他内容,只是明确了Java。
这就是你的代码的样子:
WebElement loginMbno=driver.findElement(By.id("txtUserMobile"));
if(loginMbno.isDisplayed()) {
System.out.println("Available");
}else {
System.out.println("Not");
}
LoginMbno.sendKeys("9944097094");
WebElement loginPwd=driver.findElement(By.id("txtPassword"));
loginPwd.sendKeys("123456");
WebElement loginBtn=driver.findElement(By.id("btnLogin"));
loginBtn.click();
在开始使用不同的API之前,也许你应该学习一些java基础知识
答案 1 :(得分:0)
您所指的JavaScript弹出窗口通常被称为灯箱。我对你遇到问题的猜测是,看起来场的可见性取决于似乎被记住的单选按钮的设置。
我建议如下:
WebElement signIn = driver.findElement(By.xpath("//a[.='User/Agent Sign In']"));
signIn.click();
WebDriverWait wait = new WebDriverWait(driver, 15, 100);
WebElement loginLightbox = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("exestylepopup")));
WebElement userType = loginLightbox.findElement(By.id("rbtnLogin_0"));
userType.click();
WebElement mobile = loginLightbox.findElement(By.id("txtUserMobile"));
WebElement password = loginLightbox.findElement(By.id("txtPassword"));
上面的代码很详细,以便您可以看到正在发生的事情。
此代码使用WebDriver等待查找元素而不是使用isDisplayed(如果元素不存在,则isDisplayed将出错,我提供的代码不会出错并将等到元素存在且可见)。我还使用灯箱WebElement作为在查找灯箱中的元素时进行搜索的父级,这比扫描整个页面的性能要高一些。
答案 2 :(得分:0)
单击loginBtn后,您可以尝试使用driver.switchTo()。activeElement(); 这帮助我摆脱了类似的问题
答案 3 :(得分:0)
最后我得到了解决方案。我的webdriver无法找到弹出元素的原因是,网页中有一个Facebook插件。因此,webdriver正在等待来自www.facebook.com的回复,并且没有来自Facebook.com的回复,因为它在我的PC中被阻止了。现在我解锁了facebook.com,一切正常。感谢所有试图帮助我摆脱困境的人。