当前位置: 首页 > 知识库问答 >
问题:

将值传递到Xpath表达式中

严项明
2023-03-14

我目前正在写一个针对电子商务网站的测试。当用户搜索特定产品时,将返回项目列表。我希望做的是将一个特定的值(例如数字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:无法转换表达式以返回指定的类型。

共有2个答案

方茂
2023-03-14

假设“item container”是一个DIV标记,如果不是DIV,那么用正确的标记替换DIV,*也可以工作,但可能会得到更多您不想要的元素。

尝试以下操作:

(//div[@class='itemContainer'])[1]

用项目索引替换1。

秦经义
2023-03-14

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

相反,你可能是指:

(//*[@class='itemContainer'])[{0}]

请注意,XPath中的索引从1开始-确保您实际获得了正确的项。

或者,您可以使用findElements()查找所有“itemContainers”,然后通过索引获得所需的一个。请注意,此处的索引为0:

Driver.Instance.FindElements(By.XPath("//*[@class='itemContainer']"))[item]
 类似资料:
  • 主要内容:示例XPath表达式通常定义模式以便选择一组节点。 这些模式由XSLT用于执行转换,或者由用于寻址。 XPath规范指定了七种类型的节点,这些节点可以是XPath表达式的执行输出。 根 元素 文本 属性 注释 处理指令 命名空间 XPath使用路径表达式从XML文档中选择节点或节点列表。 以下是从XML文档中选择节点/节点列表的路径和表达式列表。 序号 表达式 描述 1 选择具有给定名称的所有节点。

  • 我有一个网站,在那里我打开合同,得到唯一的合同。然后,我需要转到另一个页面,在带有分页的表中搜索此id。我编写了一段代码,如果找不到这个请求ID(它是一个链接),则转到下一页,如果它存在,则只打开这个请求ID。但webelement的初始化有一个问题,我正在尝试添加动态值。Selenium给出以下错误,我不知道如何解决 org.openqa.selenium.NoSuchElementExcept

  • 我已经通过使用PHP从SQL获取数据创建了一个动态表。每一行都有一个链接到模态的编辑按钮。我想把值从表传递到模态,这样我就可以编辑它了。 我已经尝试过循环槽表行,并能够获得不同列的值。但是,每次单击任何编辑按钮时,只有一行的最后一个被传递给Modal上的输入。 这是我的标记:Modal 表 脚本 这是输出输出 当我试图将值打印到控制台时。控制台.日志

  • 问题内容: 短 以下代码不能完全满足您的期望:https : //play.golang.org/p/sO4w4I_Lle 我以为我像往常一样弄乱了一些指针/引用的东西,但是我希望我的… …和… …以相同的方式运行(例如,更新作为第二个参数传递的引用)。 长 上面的示例是一个没有太多意义的最小复制器。这是为了使其能够在操场上工作。但是,一个不那么有意义的最小示例是: 想法是将YAML解组为(而不是

  • 问题内容: 我有这样的查找声明 它给出了答案。但是我需要某个变量值,而不是那个杂乱的值MT。如何实现呢?谢谢。 更新 我试过像“ /。 ” + searchterm +“ ./ ”无效。 问题答案: 除了使用内联语法创建正则表达式外,还可以使用RegExp对象基于字符串创建一个正则表达式

  • 我有一个lambda表达式,我希望能够传递和重用。代码如下: 这里的关键是,我希望能够将我在这里使用的lambda表达式传递到调用此代码的方法中,以便可以重用它。lambda表达式是我的。查询方法。我假设我想使用Action或Func,但我不太确定它的语法是什么,或者它是如何工作的。谁能给我举个例子吗?