4

我使用 Pagefactory 在 Selenium 中设置了我的所有页面。问题是测试是动态的,因为某些元素仅存在于某些测试中。从我理解 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 秒才能超时。这是为什么?

4

1 回答 1

-1

在您的代码试验中,我没有看到任何问题。

AjaxElementLocatorFactory

AjaxElementLocatorFactory页面工厂模式中的延迟加载概念,仅当WebElement在任何操作中使用时才能识别它们,即 WebElement 的 timeOut 可以在 的帮助下分配给 Object 页面类AjaxElementLocatorFactory

  • 句法:

    PageFactory.initElements(new AjaxElementLocatorFactory(driver, TimeoutValue), this);
    
  • 例子:

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

上面的代码最多会等待 5 秒,直到注解指定的元素被加载。如果在给定的时间跨度内未找到该元素,它将抛出NoSuchElementException.

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


在引擎盖下

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

于 2019-02-28T12:34:04.360 回答