动态地为我的PageObject类添加独特的id样式

时间:2016-07-08 09:07:38

标签: c# selenium

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

我希望你可以提出一些我可以尝试的建议。

我目前遇到的问题是,在“开发预测”页面上,我们有一个基于Plays的数量动态创建的网格,然后将SubPlays的数量细分为附加图像。

所有对象都有独特的样式ID,例如divPlayBar_0 Play1divPlayBar_1 Play2toggleAssetVisibility_0_ 0或{{1} } toggleAssetVisibility_0_1,个别元素为SubPlaysrigs_0_0_0,由rigs_0_1_2Play#SubPlay#编制索引。

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

我正在PageObject对此进行编码,但如果您使用的话,则可以从C#进行转换。

1 个答案:

答案 0 :(得分:0)

我建议你不要尝试将它们全部存储在页面对象中,而是提供一种方法来获取你想要的那个。存储它们不仅需要花费大量时间来填充整个页面,因为现在可能只需要几个对象,它更可能导致StaleElementException错误,因为页面中的某些内容已经更改,因为您获取了导致必须执行的所有内容再拿一切......花更多的时间。我会做类似下面的事情。

这些都是页面对象内的方法,例如网格或其他什么。你可能不得不调整这些名字......我不知道在给出我无法看到的页面的情况下,对你有什么意义。 :)

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));
}