将值传递到Xpath表达式中
本文关键字:表达式 Xpath 值传 | 更新日期: 2023-09-27 18:19:36
我目前正在编写一个针对电子商务网站的测试。当用户对特定产品进行搜索时,将返回项目列表。我希望做的是将一个特定的值(例如数字2)传递到我的测试场景中,此时可以将该值传递到XPath表达式(第n个子项)中,从而可以选择该项。
XPath不正确,不知道如何修复。如果有人能帮忙,我将不胜感激。
[Then(@"I select item '(.*)' from the search results")]
public static void WaitAndSelectAnItem(int item)
{
{
Driver.Instance.FindElements(By.CssSelector("#productGrid"));
var itemToSelect = Driver.Instance.FindElement(By.XPath(string.Format("//@class='itemContainer:nth-child({0})'", item)));
itemToSelect.Click();
}
}
结果消息:给定的选择器//@class='itemContainer:nth child(3)'无效或未生成WebElement。出现以下错误:InvalidSelectorError:由于以下错误,无法找到具有xpath表达式//@class='itemContainer:nth child(3)'的元素:TypeError:无法转换表达式以返回指定的类型。
nth-child
不是XPath语言的一部分,实际上是一个CSS选择器伪类。
相反,你的意思可能是:
(//*[@class='itemContainer'])[{0}]
请注意,XPath中的索引从1
开始,确保您实际上得到了正确的项。
或者,您可以使用findElements()
查找所有"itemContainers",然后通过索引获得所需的一个。请注意,此处为0索引:
Driver.Instance.FindElements(By.XPath("//*[@class='itemContainer']"))[item]
假设"项目容器"是一个div标记,如果不是div,用正确的标记替换div,*也会起作用,但可能会得到更多你不想要的元素。
试试这个:
(//div[@class='itemContainer'])[1]
将1替换为项目索引。