3

问题:- webelement (Button) isdisplayed() 不适用于负面情况

要求:-如果屏幕上未显示按钮并且如果存在,则我需要使测试流程失败,然后继续流程

代码:-

if (driver.findElement(By.id("button")).isDisplayed() == false) {
System.out.println("The Button isn't present. Exiting!!");
driver.findElement(By.linkText("Logout")).click();
}
else
{
//Proceed with the positive flow
}

在上面的代码中,如果屏幕上根本不存在按钮,则测试应该失败(应该执行 if 语句,但事实并非如此)

4

3 回答 3

2

正如TestAutomationEngr所提到的,确保页面上只有一种类型的按钮......

您可以在 webdriver 中测试负流的另一种方法是使用try and catch ..

在你的情况下,

boolean buttonFound=false;
try
{ 
    new WebDriverWait(driver,10).until(ExpectedConditions.visibilityOfElementLocated(By.id("button")));

    buttonFound=true;

}catch(Exception e)
{
    System.out.println("The Button isn't present. Exiting!!");
    driver.findElement(By.linkText("Logout")).click();
}

if(buttonFound)
{
  //positive flow
}

在这里它会等待 10 秒才能看到元素,

  • 如果找到, buttonFound则设置为 true,因此执行正流

  • 如果未找到,将显示catch 子句中的消息并单击注销链接

于 2013-11-04T06:07:15.650 回答
1

事实上,如果抛出异常,则不需要注销,因为当驱动程序关闭时,此会话将丢失。如果元素不存在或未启用,以下代码将无法通过测试。

WebElement elem = driver.findElement(By.id("button"));
Assert.assertTrue(elem.isEnabled());

最后你只需要在测试拆机时关闭驱动程序

driver.close()
于 2013-11-04T15:09:34.310 回答
0

您可以使用 FindElements.Count 方法。

像这样:

    public bool IsElementDisplayed(IWebDriver driver, By element)
    {
        if (driver.FindElements(element).Count > 0)
        {
            if (driver.FindElement(element).Displayed)
                return true;
            else
                return false;
        }
        else
        {
            return false;
        }
    }

希望能帮助到你。

于 2013-11-05T09:45:42.980 回答