剧作家多重元素-是否有与硒元素等效的元素?



使用剧作家c#,我一直在尝试使用使用相同定位符的多个元素。

是否有任何功能在剧作家是等效的FindElements方法从硒?该方法允许我们在集合中存储同一定位符的多个元素,然后可以使用该集合访问单个元素。我实际上需要对每个元素执行操作,以便将它们放在一个集合中,我可以通过索引访问它们。

似乎由于剧作家定位的严格,没有什么适合达到与硒元素相同的效果。我暂时尝试使用ElementHandles,但这是不推荐的,并且在尝试访问元素时仍然证明是有问题的。

剧作家有First, Last和Nth()定位器选项,允许我们选择一个特定的元素,但我更喜欢访问列表中的所有元素,通过索引访问,我发现当在相同或类似的区域使用多个选择时更有用。

我最终编写自己的代码来存储列表中的元素,但我想知道其他人使用什么作为FindElements的替代品?

IList<ILocator> elements = new List<ILocator>();
int listSize = await Page.Locator("div #internalSearch span.e-list-text").CountAsync();
for (int j = 0; j < listSize; j++)
{ ILocator locator = Page.Locator("div #internalSearch span.e-list-text").Nth(j);
elements.Add(locator);
}
Assert.True(elements.Count == listSize);

在剧作家中使用选择器查找定位器列表与在selenium中调用. findelements()完全相同,只是剧作家没有像. findlocators()那样专门命名的方法。

剧作家——一个匹配多个元素的选择器,返回一个定位器列表,然后你可以遍历它们:

var rows = page.GetByRole(AriaRole.Listitem);
var count = await rows.CountAsync();
for (int i = 0; i < count; ++i)
Console.WriteLine(await rows.Nth(i).TextContentAsync());

Selenium - FindElements返回一个必须遍历的元素列表。

IList < IWebElement > elements = driver.FindElements(By.TagName("p"));
foreach(IWebElement e in elements) {
System.Console.WriteLine(e.Text);
}

您也可以使用locator.evaluateAll:

此方法查找与指定定位符匹配的所有元素,并将匹配元素的数组作为第一个参数传递给传递的pageFunction(回调)。返回pageFunction调用的结果。

如果pageFunction返回Promise,则定位器。evaluateAll(pageFunction[, arg])将等待promise解析并返回其值。

代码示例(JavaScript):

const elements = page.locator('div');
const divCounts = await elements.evaluateAll((divs, min) => divs.length >= min, 10);

相关内容

  • 没有找到相关文章

最新更新