Selenium webdriver TestNg Assert.AssertTrue始终返回False-Selenium Webdriver
我有一个util函数,如下所示: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)
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());
}
}