我无法导航到我的硒代码的其他部分,总是失败
Posted
技术标签:
【中文标题】我无法导航到我的硒代码的其他部分,总是失败【英文标题】:I cannot navigate to else part of my selenium code ,always getting failure 【发布时间】:2016-01-01 19:09:10 【问题描述】:请看我下面的代码:
我的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:无法定位元素: "method":"id","selector":"error_explanation"
【问题讨论】:
请描述你的 else-branch 出了什么问题或者你需要什么样的帮助。谢谢。 我的 TestNG 结果显示为 org.openqa.selenium.NoSuchElementException: Unable to locate element: "method":"id","selector":"error_explanation"...请帮我解决这个问题 请更新问题并发布完整的错误日志。 Selenium WebDriver - Test if element is present的可能重复 【参考方案1】:在 Selenium 中,您不应使用 driver.findElement
来检查元素是否存在。
请改用driver.findElements
。它返回一个 WebElement 列表。
然后您可以检查列表是否为空。
请查看this了解更多信息
【讨论】:
【参考方案2】:使用下面的代码:-
第一种方式:-
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");
【讨论】:
【参考方案3】:如下创建一个新函数,
public boolean findElementById(String id)
try
webDriver.findElement(By.id(id));
catch (NoSuchElementException e)
return false;
return true;
检查代码中的条件是否如下:
if (findElementById("error_explanation"))
.....
else
.....
【讨论】:
【参考方案4】:您收到错误是因为当元素不可见时......它显然根本不在页面上。您首先需要检查元素是否存在,然后查看它是否可见。
根据Selenium docs 检查元素是否存在的正确方法是使用.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);
【讨论】:
java.util.List以上是关于我无法导航到我的硒代码的其他部分,总是失败的主要内容,如果未能解决你的问题,请参考以下文章