我有一个如下的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);
}
我找到了一个可以与 Ff 和 Chromre 驱动程序配合使用的解决方案,但在 Htmlunit 驱动程序中却失败了。
上述问题的解决方案-
//初始化主页元素,然后检查断言;
homePagePO searchPage = PageFactory.initElements(驱动程序, homePagePO.class);
Assert.assertTrue(chkForThisElement(searchPage.AccManagerHref));
Assert.assertTrue(chkForThisElement(searchPage.disHref));
抱歉,我发现您的代码有几个问题:-
您尚未初始化页面工厂。这就是您收到空错误的原因。
在您的评论中,您说过您正在使用
@findBy
查找元素。但为什么要将 WebElement 声明为静态呢?.为什么要声明
isusernameBoxEnabled
和相关的布尔变量为全局变量。您可以直接在断言中使用 isWebElementEnabled()
函数。基本上,如果您使用页面工厂,您的
isWebElementEnabled()
根本没有用。
因为当您使用 unameBox
时,selenium 会在网页中查找该元素,如果找不到,则返回 noSuchElement 异常。因此,如果在网页中找不到unameBox
,则无法到达isWebElementEnabled()
。你说有一个基类和测试类。但我不明白如果有不同的类,您的代码将如何工作,因为您没有将静态变量引用为
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());
}
}
希望这对您有帮助。