当前位置: 首页 > 知识库问答 >
问题:

使用PageFactory [Selenium]指定超时

佴德曜
2023-03-14

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

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

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

PageFactory.InitElements(_driver, this);

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

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

共有2个答案

洪越泽
2023-03-14

可以尝试使用AppiumFieldDecorator(一个JAVA库),

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

app.resetImplicitlyWaitTimeOut(0, TimeUnit.SECONDS);

这将在PageFactory设计模式时设置隐式时间等待。< br >我希望这可能对你有所帮助,因为你的问题说[FindBy]是用C#编写的,但采用了与JAVA相同的方法

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

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

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

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

鱼浩荡
2023-03-14

再加上阿什什的回答,我使用了两种不同的方法之一。对于常规硒,我使用:

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

对于阿皮姆,我使用:

    PageFactory.initElements(new AppiumFieldDecorator(driver, Duration.ofSeconds(30)), this);
 类似资料:
  • 我喜欢在我的自动化框架中使用带有FindBy注释的PageFactory来自动定位我的页面对象类中的元素。 我有一个WebElement,我需要能够指定几个不同的定位器。我以为FindBys是我的解决方案,但显然这不是它的工作方式。它相当于Driver.FindElement(option1).FindElement.(option2)。那不是我需要的。我需要的东西,将找到一个元素的一个或其他定位

  • 我正在尝试使用selenium webdriver、testng和page Factory实现自动化。但我面临空指针异常。

  • 问题内容: 我正在使用PageFactory在Selenium WebDriver for C#中构建页面对象模型。 不幸的是,我发现不会初始化(HTML 标签/下拉菜单)。到目前为止,我已经遇到或想出了一些解决方案,但没有一个是理想的: 并且是,因此我不能仅通过继承它们来强制使用。 在每种方法中从实例手动实例化a 都是很麻烦且重复的。除非我每次都添加一个等待,否则它也会忽略明显的内置等待并抛出s

  • 我有三个类。一个用于从网页中获取所有元素,一个用于使用这些元素执行操作,一个用于测试脚本。当我从测试脚本调用函数时,我得到一个空指针异常。我发现这是因为我使用了@FindBy注释,但我不知道如何解决这个问题。 元素类别: 操作类: 测试脚本: 当我将WebDriver对象从测试脚本传递到element类时,没有例外。由于没有WebDriver实例化,所以在使用用FindBy注释初始化的元素时会出现

  • 我遵循一个页面对象模型,并使用一个基类,该基类具有所有通用和可重用的方法,并为我的web应用程序的每个页面提供单独的页面。 现在,我正在尝试在BasePage中创建一个可以在其他页面中使用的方法。在每个页面中,我都使用了页面工厂作为元素。 我在我的BaseClass中使用下面的方法,并且我坚持将定位器提取到下面的方法中,以便我可以在所有页面中针对不同的元素定位器使用此方法。 我被困在这里: 我使用

  • 我正在尝试将我的selenium测试转换为使用页面对象模型(以及扩展为@FindBy)。我有几个这样的对象定义: 将父对象转换为使用FindBy很容易: 基本上,如果可能的话,我想这样做(我知道这不是真正的代码,这只是一个伪示例: 但是,有没有一种方法可以使用FindBy在父元素中定位子元素呢 。我需要这样做,因为我的目标是页面上的特定元素,这些元素可能与页面上的其他元素共享相同的名称或类名。谢谢