请参阅我的以下代码:
我的if
部分代码已成功运行,但我的else
部分无效。
代码被跳过并显示失败。
if (driver.findElement(By.id("error_explanation")).isDisplayed() == true) {
driver.findElement(By.id("user_email")).clear();
driver.findElement(By.id("user_email")).sendKeys("soumya50@toobler.com");
driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
driver.findElement(By.id("user_password")).sendKeys("password");
driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
driver.findElement(By.id("user_current_password")).sendKeys("password");
driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
driver.findElement(By.name("commit")).click();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.findElement(By.linkText("LOGOUT")).click();
} else
{
driver.findElement(By.linkText("REQUEST A PERMIT")).click();
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
}
获得如下错误: -
org.openqa.selenium.NoSuchElementException:无法找到元素: { “方法”: “ID”, “选择器”: “ERROR_EXPLANATION”}
答案 0 :(得分:3)
在Selenium中,您不应使用driver.findElement
来检查元素是否存在。
请改用driver.findElements
。它返回WebElement列表。
然后,您可以检查列表是否为空。
请查看this了解详情
答案 1 :(得分:1)
使用以下代码: -
第一种方式: -public static void main(String[] args) {
driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(40, TimeUnit.SECONDS);
driver.get("URL");
By element=By.id("error_explanation"));
Boolean isPresent =isElementPresent(element);
System.out.println(isPresent);
if(isPresent==true)
{
System.out.println("yes");
}
else
{
System.out.println("No");
}
}
public boolean isElementPresent(By locatorKey) {
try {
driver.findElement(locatorKey);
return true;
} catch (org.openqa.selenium.NoSuchElementException e) {
return false;
}
}
第二种方式: -
By element=By.id("error_explanation"));
Boolean isPresent = driver.findElements(element).size() > 0;
System.out.println(isPresent);
if(isPresent==true)
{
System.out.println("yes");
}
else
{
System.out.println("No");
}
答案 2 :(得分:1)
创建一个新功能,如下所示
public boolean findElementById(String id)
{
try {
webDriver.findElement(By.id(id));
} catch (NoSuchElementException e) {
return false;
}
return true;
}
检查代码中的条件如下:
if (findElementById("error_explanation")) {
.....
}else {
.....
}
答案 3 :(得分:0)
您收到错误,因为当元素不可见时......显然它根本不在页面上。首先需要检查元素是否存在,然后查看它是否可见。
根据Selenium docs检查元素是否存在的正确方法是使用.findElements()
并检查空List
。我将.isEmpty()
项检查与现有.isDisplayed()
中的if
项检查结合起来。这应该现在有效。
List<WebElement> errorExplanation = driver.findElements(By.id("error_explanation"));
if (!errorExplanation.isEmpty() && errorExplanation.get(0).isDisplayed())
{
driver.findElement(By.id("user_email")).clear();
driver.findElement(By.id("user_email")).sendKeys("soumya50@toobler.com");
driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
driver.findElement(By.id("user_password")).sendKeys("password");
driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
driver.findElement(By.id("user_current_password")).sendKeys("password");
driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
driver.findElement(By.name("commit")).click();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.findElement(By.linkText("LOGOUT")).click();
}
else
{
driver.findElement(By.linkText("REQUEST A PERMIT")).click();
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
}