我目前正在针对电子商务网站进行测试。当用户运行搜索特定产品时,将返回项目列表。我希望做的是将特定值(例如数字2)传递到我的测试场景中,此时可以将其传递到我的XPath表达式(nth-child),从而启用该项目。
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:无法转换表达式以返回指定的类型。
答案 0 :(得分:0)
nth-child
不是XPath语言的一部分,实际上是一个CSS选择器伪类。
相反,你可能意味着:
(//*[@class='itemContainer'])[{0}]
请注意,XPath中的索引以1
开头 - 请确保您确实获得了正确的项目。
或者,您可以使用findElements()
查找所有" itemContainers"然后通过索引获得所需的一个。请注意,它在此处为0索引:
Driver.Instance.FindElements(By.XPath("//*[@class='itemContainer']"))[item]
答案 1 :(得分:0)
假设“item container”是一个DIV标签,如果不是div用正确的标签替换div,*也会起作用,但是你可能会得到更多你不想要的元素。
试试这个:
(//div[@class='itemContainer'])[1]
用项目索引替换1。