首页 > 解决方案 > isDisplayed 未定位元素

问题描述

根据我的理解,当引用 Web 元素时,初始化是通过 PageFactory.init 完成的,它会在您引用它时寻找一个元素,但在我的情况下,isDisplayed 会抛出 NoSuchElementException。

我只想检查一个元素是否显示,如果是,做一件事,如果没有做另一件事,我最终会做意大利面条代码:

public CarParkBook addVehicleIfNotExist(Vehicle vehicle) {
    try {
        if (!carParkBook.vehicleInput.isDisplayed())
            carParkBook.vehicleInput.clear();
        carParkBook.vehicleInput.sendKeys(vehicle.getVehiclePlateNumber());
        carParkBook.addVehicleButton.click();
        return carParkBook;
    } catch (NoSuchElementException ex) {
        clickOnConfirmVehicleButton();
    }
    return carParkBook;
}

public class CarParkBook extends BasePage {

    private static CarParkBook carParkBook;

    @FindBy(xpath = "//input[@id='numberplate']")
    public WebElement vehicleInput;

    public static CarParkBook carParkBookInstance(WebDriver driver) {
        return carParkBook == null ? carParkBook = new CarParkBook(driver) : carParkBook;
    }

    public CarParkBook(WebDriver driver) {
        super(driver);
    }


public class BasePage {

protected final WebDriver driver;

public BasePage(WebDriver driver) {
    this.driver = driver;
    PageFactory.initElements(new AjaxElementLocatorFactory(driver, 5), this);
}

标签: seleniumselenium-chromedriver

解决方案


在这种情况下,不使用页面工厂会容易得多,您可以做一件简单的事情来检查天气元素是否显示。

if( driver.findelements(By.xpath("whatever")).size>0)  // if true your element is displayed.

但是,如果您使用页面工厂尝试使用以下代码,我没有尝试,但它应该可以工作

@FindBys(@FindBy(xpath=”whatever”)))
public List<WebElement> desiredElement;

然后使用与上面相同的逻辑,只需检查

desiredElement.size()>0

让我知道这是否有帮助。


推荐阅读