我试图从 html 代码中获取子元素(卡号),其中 html 标签和类名相同。 下面是html代码片段
<li class="paymentMethods-stored">
<li class="paymentMethod">
<div class="stored-card-details">
<span class="body-2">Name: </span>
<span class="body-2 body-2-md"> VISA</span>
<p>
<span class="body-2">Number:</span>
<span class="body-2 body-2-md"> ************4305</span>
</p>
<p>
<span class="body-2">Expiry:</span>
<span class="body-2 body-2-md"> 03/2030</span>
</p>
</div>
</li>
<li class="paymentMethod">
<div class="stored-card-details">
<span class="body-2">Name: </span>
<span class="body-2 body-2-md"> VISA</span>
<p>
<span class="body-2">Number:</span>
<span class="body-2 body-2-md"> ************4111</span>
</p>
<p>
<span class="body-2">Expiry:</span>
<span class="body-2 body-2-md"> 04/2031</span>
</p>
</div>
</li>
</li>
下面是我尝试过的标识符。但两者都返回了第一个卡号“************4305”。
@FindBy(xpath = "//li[@class='paymentMethods-stored']//li[@class='paymentMethod']")
private WebElement firstSavedCard;
@FindBy(xpath = "(//li[@class='paymentMethods-stored']//li[@class='paymentMethod'])[2]")
private WebElement secondSavedCard;
String firstCard=firstSavedCard.findElement(By.xpath("//*[@class='stored-card-details']/p[1]/span[2]")).getText();
String secondCard=secondSavedCard.findElement(By.xpath("//*[@class='stored-card-details']/p[1]/span[2]")).getText();
尝试了其他选项:这也返回了第一张卡号“************4305”。
secondSavedCard.findElement(By.xpath("/p[1]/span[2]")).getText();
secondSavedCard.findElement(By.xpath(".//*[@class='stored-card-details']/p[1]/span[2]")).getText()
最佳答案
在 XPATH 开头使用 "//"
将始终查看 DOM 的根,并忽略您在中调用 "findElement"
的事实父元素的上下文。
使用 ".//"
应该可以解决此问题,因此您可能需要仔细检查。
或者,您可以使用“self::*”
作为更详细和明显的方式
关于java - WebElement.findElement 未找到子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72143276/