【问题标题】:how to locate the element in the table in tr td如何在tr td的表中定位元素
【发布时间】:2020-04-01 18:36:38
【问题描述】:

HTML 代码如下:

<div id = ...>
  <table ...>
    <tbody>
      <tr>
        <td>
          <table ...>
            <tr>
              <td>
                <a onclick="…" class="xl" href="#">1111111</a>

我需要找到最后一个值为 111111 的单元格/元素并单击它。

我尝试了这些 Java:

driver.findElement(By.xpath("//tr/td/a[contains(text(),'111111')]")).click();
driver.findElement(By.cssSelector("a[href='#']")).click();

但它不起作用。

有什么想法吗?谢谢

【问题讨论】:

  • html 在客户端。 Java 在服务器端。你想使用javascript吗?
  • 不,我应该只使用Java,这是为了创建黄瓜自动化测试并运行它。特别是这个元素我需要点击并继续测试。
  • 试试这个:driver.findElement(By.xpath("//a[contains(.,'111111')]"))

标签: java html selenium


【解决方案1】:

如果您想要最后一个元素的值/文本为 111111,那么我会使用 findElements,然后单击最后一个:

List<WebElement> listOfElements = driver.findElements(By.xpath("//*[text()='111111']"));

int lastElementIndex = listOfElements.size() - 1;

listOfElements[lastElementIndex].click();

【讨论】:

  • 您想要单击值/文本为 111111 的最后一个元素。这是否正确?如果是这样,我的回答应该是这样。
  • 不,这是一个表格,一个水平表格,其中标题是第一行,值是第二行。该元素在第一列第二行,需要点击该元素。
【解决方案2】:

为什么不获取表体中所有行的文本集合。

WebElement container = Webdriver.findElement(By.xpath("/*xpath to <tbody> element here*/")).click();
List<WebElement> tableRows = container.findElement(By.tagName("tr"));
List<String> elementText = new ArrayList<>();
tableRows.foreach(x -> elementText.add(x.getText()));

然后搜索该字符串的最后一个索引

int indexOfLast = tableRows.lastIndexOf("1111111");
WebElement theLastElement = elementText.get(indexOfLast);

然后您可以获取最后一个元素并使用它来查找您正在寻找的标记元素。

WebElement myElement = theLastElement.findBy(tagName("a"));

【讨论】:

    【解决方案3】:

    请尝试以下代码:

    //Storing the value from the table we have to click 
    String tablevalue = "111111";
    
    //Get all the WebElements from second line having values
    //***We might have to update the xpath***
    List<WebElement> allTableValues = driver.findElements(By.Xpath("//tr/td//a"));
    
    //Clicking on Element which matches our Value from all Table Values
    for(WebElement ele: allTableValues){
        if(ele.getText().equals(tablevalue)){
        ele.click();
        break;
        }
    }
    

    您可以更改 tableValue 变量的值以使用相同的代码来单击其他表值。

    【讨论】:

    • 谢谢。但它看起来像单元格中的这个值随着每个测试动态变化:(意味着我需要总是点击第一列/第二个原始单元格而不是值。点击这个单元格的最佳方法是什么?谢谢。
    • 如果单元格的值正在改变,我们想使用单元格的值来做,那么我们可以修改代码为: String tablevalue = driver.findElement("FirstCellLocator").getText() ;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 2021-06-08
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多