为什么只需要列表来取消 selenium webdriver 中的单个弹出窗口?

Why list is required just to cancel single pop up in selenium webdriver?

在页面对象工厂中:

By popup=By.xpath("//button[test()='NO THANKS']");

public List<WebElement> getPopUpSize(){
return driver.findElements(popup);
}

public WebElement getPopUp(){
return driver.findElement(popup);
}

将上述方法调用到测试用例中:

LandingPage l = new LandingPage(driver);
if(l.getPopUpSize().size()>0)
{
l.getPopUp().click();
}

我不明白为什么我们必须创建一个列表来取消单个弹出?

不,对于单个网络元素,您不需要 findElements。使用 findElementExplicit waits,如下图所示:

  1. 使用ExplicitWaits

代码:

public WebElement getPopUpWebElement(){
    return driver.findElement(popup);
}

并在测试方法中:

    try {
        WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(30));
        wait.until(ExpectedConditions.elementToBeClickable(getPopUpWebElement())).click();
    }
    catch(Exception e){
        System.out.println("Could not click on pop up");
        e.printStackTrace();
    }