请参阅我下面的代码:
我的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"}
在Selenium中,您不应该使用driver.findElement
来检查元素是否存在。使用driver.findElements
代替。它返回一个WebElement列表。然后,您可以检查列表是否为空。
查看更多信息
使用下面的代码:-
方式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;
}
}
方式2:-
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");
}
创建如下新函数
public boolean findElementById(String id)
{
try {
webDriver.findElement(By.id(id));
} catch (NoSuchElementException e) {
return false;
}
return true;
}
检查代码中的条件:
if (findElementById("error_explanation")) {
.....
}else {
.....
}
你得到的错误,因为当元素不可见…显然,它根本就不在纸上。您首先需要检查该元素是否存在,然后检查它是否可见。
根据Selenium文档检查元素是否存在的正确方法是使用.findElements()
并检查空List
。我在你现有的if
中合并了.isEmpty()
检查和.isDisplayed()
检查。现在应该可以工作了。
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);
}