我目前正在使用Selenium
编写一些自动化测试。我在使用Dynamic Objects
的一个页面上遇到问题,并且在尝试将它们存储在PageObject
中时遇到问题。
我希望你能有一些我可以尝试的建议。
我目前遇到的问题是,在"发展预测"页面上,我们有一个网格,该网格是根据Plays
数动态创建的,然后按SubPlays
数细分为附加图像。
所有对象都有一个独特的样式 ID,例如 divPlayBar_0
表示Play1
,divPlayBar_1
表示Play2
,toggleAssetVisibility_0_
0 或 toggleAssetVisibility_0_1
表示SubPlays
,并且单个元素是rigs_0_0_0
的,rigs_0_1_2
按Play#
、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));
}