动态地将独特的 id 样式添加到我的 PageObject 类中



我目前正在使用Selenium编写一些自动化测试。我在使用Dynamic Objects的一个页面上遇到问题,并且在尝试将它们存储在PageObject中时遇到问题。

我希望你能有一些我可以尝试的建议。

我目前遇到的问题是,在"发展预测"页面上,我们有一个网格,该网格是根据Plays数动态创建的,然后按SubPlays数细分为附加图像。

所有对象都有一个独特的样式 ID,例如 divPlayBar_0 表示Play1divPlayBar_1表示Play2toggleAssetVisibility_0_ 0 或 toggleAssetVisibility_0_1 表示SubPlays,并且单个元素是rigs_0_0_0的,rigs_0_1_2Play#SubPlay#Column#进行索引。

我正在尝试找到一种方法将这些动态添加到我的PageObject类中。如果您有任何建议,我将不胜感激。

我正在用C#编码,但如果这是您使用的,则可以从Java转换。

我建议您不要尝试将它们全部存储在页面对象中,而是提供一种方法来获取所需的页面对象。将它们全部存储不仅需要花费大量时间来抓取整个页面,可能只需要您现在需要的几个对象,而且更有可能导致 StaleElementException 错误,因为自从您获取所有内容以来,页面中的某些内容已更改导致您必须再次获取所有内容......需要更多时间。我会做下面这样的事情。

这些都是页面对象内的方法,例如 Grid 或其他方法。您可能需要调整名称...鉴于我看不到的页面,我不确定该怎么称呼它们对您有意义。:)

public IWebElement getPlay(String playId)
{
    return driver.FindElement(By.Id("divPlayBar_" + playId));
}
public IWebElement getSubPlay(String playId, String subPlayId)
{
    return driver.FindElement(By.Id("toggleAssetVisibility_" + playId + "_" + subPlayId));
}
public IWebElement getRig(String playId, String subPlayId, String columnNo)
{
    return driver.FindElement(By.Id("rigs_" + playId + "_" + subPlayId + "_" + columnNo));
}

最新更新