关于Atata框架的另一个问题。我发现表格的加载速度很慢。那里有一张大约一张桌子。 1000行,每当我对检索到的行进行任何操作时,似乎引擎再次加载表。
缓慢的示例代码:
var row = _page.Inventory.Rows[x => x.Text == "some inventory"];
row.Should.Exist(); // that statement takes the same time as the above one and is slow...
我用于表格的代码:
[FindByCss(".invGrid")]
public Table<GroupsRow, Page> Inventory { get; set; }
我试图找到任何方便的方法来急切地加载数据,但是找不到任何方法。
我的问题是:
答案 0 :(得分:3)
目前Table.Rows[predicate]
在检查每一行时对大型表的工作缓慢。它适用于小桌子。可能我会更新它以便将来更快地工作,但它不是那么容易,所以它现在被推迟了。还有另一种快速方法可以执行单个XPath命令:
使用索引器:public TItem this[params string[] cellValues]
_page.Inventory.Rows["some inventory"]
它将找到包含传递值的单元格的第一行。 但它可能是不准确的,因为它使用'包含'谓词,如果你 表中有类似的字符串值。
使用方法:public TItem GetByXPathCondition(string itemName, string xPathCondition)
string itemName = "some inventory";
_page.Inventory.Rows.GetByXPathCondition(
itemName,
$".//span[contains(concat(' ', normalize-space(@class), ' '), ' item-name ')][normalize-space(.) = '{itemName}']")
该示例查找包含<tr>
所需文本的<span class="item-name">
。
这种方法准确,但sytax更复杂。
您可以通过解压缩使上述示例更易于使用 扩展方法:
public static class TableRowListExtensions
{
public static SomePage.GroupsRow GetByName(this TableRowList<SomePage.GroupsRow, SomePage> rowList, string name)
{
return rowList.GetByXPathCondition(name, $".//span[contains(concat(' ', normalize-space(@class), ' '), ' item-name ')][normalize-space(.) = '{name}']");
}
}
然后在测试中使用它:
_page.Inventory.Rows.GetByName("some inventory")
它应该快速准确。
我还建议您在单个类使用CSS选择器时使用[FindByClass("invGrid")]
属性而不是[FindByCss(".invGrid")]
。 FindByCssAttribute
在Atata中运行速度稍慢,因为与大多数其他查找属性相比,它执行了一个额外的WebDriver命令。