当前位置: 首页 > 知识库问答 >
问题:

WebElement。findElement找不到子元素

魏翰
2023-03-14

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

共有1个答案

呼延源
2023-03-14

尝试下面的xpath选择所有编号的标签-

//li[@class="paymentMethod"]/descendant::span[4]

用于选择第一个元素使用-

(//li[@class="paymentMethod"]/descendant::span[4])[1]

用于选择第二个元素使用-

(//li[@class="paymentMethod"]/descendant::span[4])[2]

等等。

此外,您可以使用findelements而不是findelement来查找所有元素。收集列表中的所有元素,然后遍历并提取文本。

 类似资料:
  • 这里有一个git repo包含一个应用程序和一个测试项目。失败的JUnit测试证明了问题:https://github.com/achengs/an-appium-question 详细信息如下(代码和Appium日志交错) 这是第一个成功的发现。活动的布局xml文件对于我要查找的文本字段具有以下属性: 有一个HTML请求。我正在测试一个原生的Android应用程序。下面是当前测试活动的布局xml

  • 我不能在selenium中找到使用"id"的元素,因为id在每个执行会话中都是随机变化的,所以我不会在下一次执行中得到相同的id。因为没有其他唯一的属性来标识元素。 代码示例

  • 我已经写了下面的代码来选择单选按钮,它的工作很好,但今天它不工作了。请找到代码和相应的错误消息 代码1: 错误1:“线程”main“org.openqa.selenium.TimeoutException中出现异常:等待存在由:By.id:0_2485a_startdate定位的元素10秒后超时” 代码2: 错误2:“线程”main“org.openqa.selenium.TimeoutExcep

  • 为什么findElement(By)的返回类型是WebElement? 我知道文档中提到了返回类型是Webelment,但有人能解释一下为什么返回类型是Webelment吗。 我对这个话题的研究。 因为我们使用findElement搜索元素,webelement类用于表示HTML元素。 请让我知道我的想法是否正确或有任何具体原因

  • 我有一个输入框,就像我在这里用来输入我的问题,它的HTML是 每次,我都会尝试输入一些文本 我明白错误了-

  • 任何提示都会很有帮助!