java - WebElement.findElement 未找到子元素

标签 java selenium xpath webdriver findelement

我试图从 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/

相关文章:

java - Mockito:如何模拟 javax.inject.Provider 创建的原型(prototype) bean?

用于测量带宽、延迟、跳数的 Java 库?

c# - NoSuchWindowException - 尽管遵循其他答案中的配置建议,但无法在 IE 上的 Selenium 中的关闭窗口中找到元素

sql-server - Xml.modify 'replace value of' 中的 SQL REPLACE 函数

xpath - Apache Camel/xpath 操作结果检测

java - ivy冲突解决: two libs need another lib in different version

java - 在 JEditorPane 中高亮一个词

java - 从 RESTClient 获取的结果中解析具体数据

java - PageObject 实例调用执行某些操作

python - Xpath 提取某些字符之间的日期并用作日期