AjaxElementLocatorFactory

AjaxElementLocatorFactory

我已经使用Pagefactory在Selenium中设置了所有页面。问题是测试是动态的,因为某些元素仅存在于某些测试中。从m理解AjaxElementFactory的工作方式如下:

PageFactory.initElements(new AjaxElementLocatorFactory(driver,5), this);

@FindBy(id="ctl00_DefaultContent_RbIndividual")
WebElement OwnershipIndividual;

public void sendString(String stuff){
    OwnershipIndividual.sendKeys(stuff);
}

但是,如果元素OwnershipIndividual不在5秒之内,则它将引发NoSuchElementException。
我的问题是,尽管我将超时设置为5秒,但仍然需要50-60秒的超时时间。这是为什么?

最佳答案

在您的代码试用中,我看不到任何问题。

AjaxElementLocatorFactory

AjaxElementLocatorFactory 是Page Factory模式中的延迟加载概念,仅当在任何操作中使用WebElement时才标识WebElement,即,可以借助AjaxElementLocatorFactory将WebElement的超时分配给Object页面类。

  • 语法:
    PageFactory.initElements(new AjaxElementLocatorFactory(driver, TimeoutValue), this);
    
  • 示例:
    PageFactory.initElements(new AjaxElementLocatorFactory(driver,5), this);
    

  • 上面的代码最多等待5秒钟,直到加载由注释指定的元素。如果在给定的时间间隔内未找到该元素,它将抛出NoSuchElementException

    因此,按照您的代码块,如果在5 seconds之后找不到该元素,则应抛出NoSuchElementException。

    引擎盖下

    AjaxElementLocatorFactory使用AjaxElementLocator创建一个SlowLoadableComponent,当load()返回时,它可能尚未完成加载。调用load()之后,isLoaded()方法应继续失败,直到组件已完全加载。

    09-11 22:12