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

Selenium webdriver TestNg Assert.AssertTrue始终返回False-Selenium Webdriver,selenium-webdriver,testng,Selenium Webdriver,Testng,我有一个util函数,如下所示: public static boolean isWebElementEnabled(WebElement element) { try { return element.isEnabled(); } catch (Exception exx) { return false; } } public static boolean chkForThisElement(WebElement myElement)

我有一个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);
当我在测试类中测试它时,它总是返回false。我尝试了不同的方法来测试是否存在,但它只返回false


我发现了一个解决方案,可以很好地与Ff和Chromre驱动程序配合使用,但在Htmlunit驱动程序中却失败了

上述问题的解决方案-

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

homePagePO searchPage=PageFactory.initElementsdriver, homePagePO.class

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

很抱歉,我发现您的代码有几处错误:-

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

在您的评论中,您说过您正在使用@findBy查找元素。但是为什么要将WebElement标记为静态的呢

为什么将isusernameBoxEnabled和相关的布尔变量声明为全局变量。您可以直接在断言中使用isWebElementEnabled函数

如果您使用的是页面工厂,那么您的isWebElementEnabled基本上没有任何用处。 因为在使用unameBox时,selenium会在网页中查找元素,如果找不到,则返回NoTouchElement异常。因此,如果在网页中找不到,unameBox将无法访问isWebElementEnabled

你说过有一个基类和测试类。但如果存在不同的类,我不理解您的代码是如何工作的,因为您没有引用静态变量Assert.assertTruebaseClass.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());
    } 
}

希望这对您有所帮助。

您如何设置元素本身?我没有看到设置unameBox、pwordBox、submitBtn和multyCts的代码@FindByxpath=./*[@id='username']公共静态WebElement unameBox;这意味着它正在进入挡块。那么它遇到的异常是什么呢;null[Ljava.lang.StackTraceeElement;@6dc7efb5 null但该元素已存在于网页中
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());
    } 
}