【问题标题】:Dynamic element locator on a web tableWeb 表上的动态元素定位器
【发布时间】:2017-08-23 01:19:51
【问题描述】:

我的第一个测试用例是添加一条我已成功自动化的记录。我的第二个测试用例是删除我在测试用例一中添加的记录。我需要您的帮助才能从 Web 表中找到“删除”按钮。首先,我要定位行(基于 column1 和 column2 中的值,在本例中为 ACTION20ALIANT 和 2018-01-07),然后转到最后一列并单击删除按钮。删除按钮的位置因记录名称而异。下面是我的方法,它给出了一个错误。

public static void Test(WebDriver driver) {
    WebElement table = driver.findElement(By.name("frmSMain"));
    List<WebElement> rows = table.findElements(By.tagName("tr"));

    for (WebElement row : rows) {
      if(row.findElement(By.xpath("//tr/td[text()='ACTION20Aliant']/following-sibling::td[text()='   2018-01-07   ']")).getText().equals("   2018-01-07   "))
      row.findElement(By.cssSelector("td:last-child input")).click();
    }
 }

代码无法识别我的 xpath:

无法找到带有xpath == //tr/td[text()='ACTION20Aliant']/following-sibling::td[text()=' 2018-01-07'] 的元素

删除按钮的扩展首td和td如下:

【问题讨论】:

  • 你能显示链接的扩展吗?第一个td
  • 还显示将td 扩展为delete
  • @lauda- 我添加了扩展的第一个 td 和 td 以进行删除。请检查。
  • 更新了答案
  • 有一篇文章谈到了类似的要求-testautomationguru.com/…

标签: java xpath selenium-webdriver


【解决方案1】:

您需要搜索具有这两个tdtr 并从那里继续。

起点示例:

//tr[.//a[text()='ACTION20Aliant']][.//td[text()='2018-01-07']]

这将返回具有这些值的tr,现在您可以附加所需的选择器。

您需要附加的内容可能如下所示:

//input[@value='Delete']

导致:

//tr[.//a[text()='ACTION20Aliant']][.//td[text()='2018-01-07']]//input[@value='Delete']

现在您可以搜索元素,如果找到则使用单击返回的对象,否则什么也不做。

【讨论】:

  • 感谢您的解决方案。我在鳕鱼下面试过了,仍然说找不到 xpath public static WebElement Test(WebDriver driver) { WebElement element = driver.findElement(By.xpath("//tr[.//a[text()='ACTION20Aliant']][.//td[text()=' 2018-01-07 ']]//input[@value='Delete']")); return element; }
  • @lauda- 非常感谢您的解决方案。我完全按照你说的做了,现在正在工作。下面是我的最终 xpath(不得不稍微调整一下)//tr[.//a[text()='ACTION20Aliant']][.//td[contains(text(),'2018-01-07')]]//input[@value='Delete']
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-16
  • 1970-01-01
  • 2021-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-05
相关资源
最近更新 更多