我有一个页面,需要检查按钮的可见性,如果有,请单击按钮,否则跳过该步骤。使用pom,我尝试了以下方法
方法-1
WebDriver driver;
WebElement searchForButton = driver.findElement(By.xpath("//*@id=\"root\"]/div/div[2]/div/div[2]/div/div[2]/div[2]/div"));
public void buttonValidation() {
searchForButton.click();
}
当按钮不可见时,这种方法将失败。
方法2:
@FindBy(xpath= "//*[@id=\"root\"]/div/div[2]/div/div[1]/div/div/div[2]/button[1]/span[1]")
private List<WebElement> elements;
public boolean isElementPresent() {
return elements != null && elements.size()>0 ;
}
public void validateButton() throws InterruptedException {
Thread.sleep(3000);
Boolean b = isElementPresent();
if(b)
{
WebElement btn = driver.findElement(By.xpath("//*@id='root']/div/div[2]/div[2]/div[1]/div/div/div[2]/button[1]")); //JAVA NULL POINTER EXCEPTION HERE
btn.click();
}
}
使用这种方法,为btn搜索抛出java.lang.nullpointerexception
正确的方法是什么?
3条答案
按热度按时间anhgbhbe1#
您可以使用以下通用方法:
它将通过元素的定位器作为参数获取。如果发现元素可见,将单击该元素并
true
否则将被退回false
将被退回。所以你可以这样使用它:
顺便说一句,强烈建议不要像这样使用自动生成的定位器
//*@id='root']/div/div[2]/div[2]/div[1]/div/div/div[2]/button[1]
因为它们非常易碎,而且非常不可靠。谷歌提供了这两个以及许多其他教程来学习如何选择正确、可靠的定位器。
jv4diomz2#
对于此类场景,请使用try-catch
7nbnzgx93#
你的
isElementPresent()
你应该列一张单子args
,因为您正在验证所以它应该是这样的:
您的调用方方法应该如下所示:-
您的第一种方法可以 Package 在
try-catch block
:-