Selenium Java - 如何搜索和查找给定父元素的特定嵌套元素是相同的

问题描述 投票:1回答:3

假设我有一个这样的页面:

<div class = "A">
   <h1>AA</h1>
   <p>This</p>
</div>

<div class = "A">
   <h1>BB</h1>
   <p>This</p>
</div>

并且假设这样做可变长度,所以每次加载页面时,随机顺序都有一个随机数的“A类”div,其中h1为:“CC”,“DD”等......找到并点击div中带有“BB”的链接“This”。这是我尝试过的:

driver.findElement(By.xpath("//*[text()='BB']")).findElement(By.xpath("//*
[text()='This']")).click();

我也尝试过:

WebElement name = driver.findElement(By.xpath("//*[text()='BB']"));
name.findElement(By.xpath("//*[text()='This']")).click();

但在这两种情况下,我总是最终用“AA”点击div中的“This”。我可以将它定义为单击第二个div,但如果我下次加载页面并将其随机化顺序以便第一个和第二个div切换位置会怎样。在这种情况下,硬编码总是点击第二个元素将无法正常工作。

所以我想知道如果满足条件“BB”存在,如何在div内搜索。

java html css selenium
3个回答
0
投票

想法是:

  • 获取列表中的所有“A”类元素。
  • 查找包含“BB”的标题文本
  • 如果是,则获取该类“A”索引的标记p
  • 点击“这个”

以下是完整的实现。

List<WebElement> allClass = driver.findElements(By.className("A"));
    String optionString = "BB"; 

    for(WebElement elm : allClass){
        WebElement header = elm.findElement(By.tagName("h1"));
        if(header.getText().equalsIgnoreCase(optionString)){
            WebElement thisP = elm.findElement(By.tagName("p"));
            thisP.click();
            break;
        }
    }

0
投票

要查找并单击This中div的链接BB,您可以使用以下代码块:

driver.findElement(By.xpath("//div[@class='A']/h1[text()='BB']//following::p[1]")).click();

0
投票

试试这个xpath

//div[@class='A']//h1[text()='BB']//following::p

要么

//div[contains(@class,'A')]//h1[text()='BB']//following::p

码:

WebElement thisClick= driver.findElement(By.xpath("//div[contains(@class,'A')]//h1[text()='BB']//following::p"));
thisClick.findElement(By.xpath("p[text()=='This']")).click();
© www.soinside.com 2019 - 2024. All rights reserved.