TestNg Assert.AssertTrue 始终返回 False - Selenium Webdriver

问题描述 投票:0回答:2

我有一个如下的util函数:

public static boolean isWebElementEnabled(WebElement element) {
    try {
        return element.isEnabled();
    } catch (Exception exx) {
        return false;
    }
}

public static boolean chkForThisElement(WebElement myElement) {
    try {
        return myElement.isDisplayed();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        return false;
    }
}

我在基类中这样称呼它:

public static boolean isusernameBoxEnabled = isWebElementEnabled(unameBox); 
public static boolean ispWordBoxEnabled = isWebElementEnabled(pwordBox);
public static boolean issubmitBtnEnabled = isWebElementEnabled(submitBtn);
public static boolean isctrsDrpdwnEnabled = isWebElementEnabled(multyCts);

当我在

Test
类中测试它时,它总是返回
false
。我尝试了不同的方法来测试存在性,但它只返回
false

@Test(priority=1)
public void verifyLoginpagecontrols() {
    Assert.assertTrue(isusernameBoxEnabled);
    Assert.assertTrue(ispWordBoxEnabled);
    Assert.assertTrue(issubmitBtnEnabled);
    Assert.assertTrue(isctrsDrpdwnEnabled);
} 
selenium-webdriver testng
2个回答
0
投票

我找到了一个可以与 Ff 和 Chromre 驱动程序配合使用的解决方案,但在 Htmlunit 驱动程序中却失败了。

上述问题的解决方案-

//初始化主页元素,然后检查断言;

homePagePO searchPage = PageFactory.initElements(驱动程序, homePagePO.class);

    Assert.assertTrue(chkForThisElement(searchPage.AccManagerHref));
    Assert.assertTrue(chkForThisElement(searchPage.disHref));

0
投票

抱歉,我发现您的代码有几个问题:-

  1. 您尚未初始化页面工厂。这就是您收到空错误的原因。

  2. 在您的评论中,您说过您正在使用

    @findBy
    查找元素。但为什么要将 WebElement 声明为静态呢?.

  3. 为什么要声明

    isusernameBoxEnabled
    和相关的布尔变量为全局变量。您可以直接在断言中使用
    isWebElementEnabled()
    函数。

  4. 基本上,如果您使用页面工厂,您的

    isWebElementEnabled()
    根本没有用。 因为当您使用
    unameBox
    时,selenium 会在网页中查找该元素,如果找不到,则返回 noSuchElement 异常。因此,如果在网页中找不到
    unameBox
    ,则无法到达
    isWebElementEnabled()

  5. 你说有一个基类和测试类。但我不明白如果有不同的类,您的代码将如何工作,因为您没有将静态变量引用为

    Assert.assertTrue(baseClass.isusernameBoxEnabled)
    。所以我假设你只有一个类和不同的方法。

尝试以下代码:-

public class Base {                
    @FindBy()
    WebElement unameBox;

    @FindBy()
    WebElement pwordBox;

    @FindBy()
    WebElement submitBtn;

    @FindBy()
    WebElement multyCts;
}

public class Test {
    @Test(priority=1)
    public void verifyLoginpagecontrols() {
        //initialize page factory
        Base base = PageFactory.initElements(driver, Base.class);
        Assert.assertTrue(base.unameBox.isEnabled());
        Assert.assertTrue(base.pwordBox.isEnabled());
        Assert.assertTrue(base.submitBtn.isEnabled());
        Assert.assertTrue(base.multyCts.isEnabled());
    } 
}

希望这对您有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.