用PageFactory [Selenium]指定超时

时间:2018-10-11 10:56:34

标签: selenium selenium-webdriver selenium-chromedriver

我知道我们可以通过[FindsBy]属性覆盖属性并使用PageFactory初始化所有元素来清理页面对象。我们定义这样的属性:

[FindsBy(How = How.CssSelector, Using = "input[type='submit']")]
public IWebElement SignIn { get; private set; }

我们可以通过调用以下方法初始化所有此类属性:

PageFactory.InitElements(_driver, this);

我想到的第一个问题是搜索过程将如何运行?有多少次重试,是否有超时?我假设只有零超时的尝试。

是否可以将PageFactory方法与自定义搜索过程相结合,例如3次尝试在设置了ExpectedCondition的情况下进行搜索等?

2 个答案:

答案 0 :(得分:2)

除了Ashish的答案外,我还使用两种不同的方法之一。对于普通的硒,我使用:

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

对于Appium,我使用:

    PageFactory.initElements(new AppiumFieldDecorator(driver, Duration.ofSeconds(30)), this);

答案 1 :(得分:1)

您可以尝试使用AppiumFieldDecorator(JAVA库)

app = new AppiumFieldDecorator(driver, 10, TimeUnit.SECONDS);
PageFactory.initElements(app, this);

app.resetImplicitlyWaitTimeOut(0, TimeUnit.SECONDS);

这将设置您的PageFactory设计模式时的隐式等待时间。
我希望这对您有帮助,因为您的问题说[FindBy]在C#中是这样,但是遵循相同的JAVA方法,

@FindBy("your another locator")
WebElement e2;

等待渲染和默认的持续时间。

@WithTimeout(timeOut = time, timeUnit = unit)
@FindBy("your locator")
WebElement e;

在这里您可以通过@WithTimeout提供超时时间设置。