假设我有一个这样的页面:
<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内搜索。
想法是:
以下是完整的实现。
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;
}
}
要查找并单击This
中div的链接BB
,您可以使用以下代码块:
driver.findElement(By.xpath("//div[@class='A']/h1[text()='BB']//following::p[1]")).click();
试试这个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();