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

如何在selenium、java中将动态值传递到xpath?

巫经义
2023-03-14

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

org.openqa.selenium.NoSuchElementException:没有这样的元素:无法定位元素:{"method":"xpath","selector":"//spans[@class='link__text'and text()='222254']/.../.../...//输入"}(会话信息: chrome=89.0.4389.72)

construcd是我存储动态值的变量,它会更改每次测试运行。代码如下所示:

    csecp.waitForElementVisibility(csecp.getContractStatusEmergencyChangeHeader());
        int totalPages = Integer.parseInt(csecp.getTotalPagesString().getText());
        for(int i = 0; i < totalPages; i++) {
            csecp.sleep(500);
            if (**csecp.prepareWebElementWithDynamicXpath(csecp.getContractDynamicValue(),contractId).isDisplayed()**) {
                csecp.prepareWebElementWithDynamicXpath(csecp.getContractDynamicValue(),contractId).click();
                csecp.waitForElementVisibility(csecp.getConfirmAMLApprovalButton());
                csecp.getConfirmAMLApprovalButton().click();
                break;
            }
            csecp.waitForElementVisibility(csecp.getNextPageButton());
            csecp.getNextPageButton().click();
        }

这就是我试图将动态值传递到xpath的方式

   private String contractDynamicValue = "//span[@class='link__text' and text()='xxxxx']/../../..//input";

    public WebElement prepareWebElementWithDynamicXpath (String xpathValue, String substitutionValue ) {

        return getWebDriver().findElement(By.xpath(xpathValue.replace("xxxxx", substitutionValue)));
    }

共有3个答案

虞承泽
2023-03-14

通过文本和以下元素获取元素始终是最好的解决方案。对于动态元素,可以使用类似XPath的

 //div[.='Dummy_text']/following::span[text()='test_text']

你可以从这里看到一些教程https://www.guru99.com/xpath-selenium.html

微生学
2023-03-14

查看您使用的xpath是

//span[@class='link__text' and text()='xxxxx']/../../..//input

如果您想使xxxxx成为动态的,可以执行以下操作:-

string sub_value = "222254";
//span[@class='link__text' and text()='"+sub_value+"']/../../..//input
郎和志
2023-03-14

您可以按如下方式定义和使用此XPath定位器:

String contractDynamicValue = "//span[@class='link__text' and text()='%s']/../../..//input";

public WebElement prepareWebElementWithDynamicXpath (String xpathTemplate, String substitutionValue ) {
    String xpath = String.format(xpathTemplate,substitutionValue);
    return getWebDriver().findElement(By.xpath(xpath));
}
 类似资料:
  • 本文向大家介绍如何将动态值动态传递到SAP ABAP中的CDS,包括了如何将动态值动态传递到SAP ABAP中的CDS的使用技巧和注意事项,需要的朋友参考一下 我认为不存在将动态值传递给CDS的方法。 为了使DCL能够完成其分配的活动,您需要声明和定义权限对象。假设您无法执行此操作。然后,您可以获得所有结果,然后使用ABAP在网关层过滤结果。

  • (更新) 我正在使用java servlet和oracle sql构建酒店管理<我从数据库打印一个html表,如果我更改了传递给另一个servlet的值,我需要更新一行<这是我的第一个servlet 这是html表的示例 表格样本 现在,我需要更新行值并将其发送到数据库,这是第二个servlet打印表 我像这样更新了我的代码,但只有第一个按钮有效。有什么想法吗?提前谢谢你。 (更新) 最后,我的程

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

  • 我想将值变量从one()函数传递给x JSON。x json不应该带有one()函数或任何其他函数。有可能吗? null null

  • 我有一个用例,在这个用例中,我需要将一个file_path(作为一个新元素)追加到另一个pcollection中,它是一个元素字典。 但奇怪的是,它没有执行这个语句,因此没有输出,甚至没有任何错误。但是当我使用以下命令创建pcollection时: file_path=beam.create(['some_path_value'])并按照上面的方式传递beam.pvalue.assingleton

  • 特别是,当我使用这些行获取错误时: 我尝试了下面的代码: 并且获取常数大于0,并且显示Cart中的项数为1,但是每当我在代码获取问题中使用这一行时,从适配器到活动获取值是正确的方法吗? cartAdapter.java: logcat: