我目前正在写一个针对电子商务网站的测试。当用户运行对特定产品的搜索时,将返回项目列表。我希望做的是将一个特定的值(例如,数字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:表达式无法转换为返回指定的类型。
发布于 2015-10-28 17:23:17
nth-child不是XPath语言的一部分,实际上是CSS选择器伪类.
相反,你可能是指:
(//*[@class='itemContainer'])[{0}]注意,XPath中的索引以1开头--确保您确实得到了正确的项。
或者,您可以使用findElements()查找所有"itemContainers“,然后按索引获得所需的”itemContainers“。请注意,它在这里是0索引的:
Driver.Instance.FindElements(By.XPath("//*[@class='itemContainer']"))[item]发布于 2015-10-28 20:20:40
假设"item容器“是一个DIV标记,如果不是div将div替换为正确的标记,那么*也会工作,但可能会得到更多您不想要的元素。
试试这个:
(//div[@class='itemContainer'])[1]用项目索引替换1。
https://stackoverflow.com/questions/33397534
复制相似问题