首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将值传递给Xpath表达式

将值传递给Xpath表达式
EN

Stack Overflow用户
提问于 2015-10-28 17:22:04
回答 2查看 1.2K关注 0票数 1

我目前正在写一个针对电子商务网站的测试。当用户运行对特定产品的搜索时,将返回项目列表。我希望做的是将一个特定的值(例如,数字2)传递到我的测试场景中,在测试场景中可以将其传递到我的XPath表达式(nth-child)中,从而使项目能够被选中。

XPath是不正确的,并且不确定如何修复它。如果有人能帮忙就好了。

代码语言:javascript
运行
复制
   [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:表达式无法转换为返回指定的类型。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-28 17:23:17

nth-child不是XPath语言的一部分,实际上是CSS选择器伪类.

相反,你可能是指:

代码语言:javascript
运行
复制
(//*[@class='itemContainer'])[{0}]

注意,XPath中的索引以1开头--确保您确实得到了正确的项。

或者,您可以使用findElements()查找所有"itemContainers“,然后按索引获得所需的”itemContainers“。请注意,它在这里是0索引的:

代码语言:javascript
运行
复制
Driver.Instance.FindElements(By.XPath("//*[@class='itemContainer']"))[item]
票数 0
EN

Stack Overflow用户

发布于 2015-10-28 20:20:40

假设"item容器“是一个DIV标记,如果不是div将div替换为正确的标记,那么*也会工作,但可能会得到更多您不想要的元素。

试试这个:

代码语言:javascript
运行
复制
(//div[@class='itemContainer'])[1]

用项目索引替换1。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33397534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档