Selenium java 如何从第二个引号中的元素中获取文本 “”

Selenium java how to get text from element in second quotes ""

提问人:Iskra 提问时间:2/27/2020 最后编辑:supputuriIskra 更新时间:2/27/2020 访问量:1112

问:

<div class="_2b9p7-6Tcy_ja6zEhxML2e">
   <div class="flex _1VLiOJeD-kdBBLC9owCkQr">
    <span class="flex-1">”Total””:”</span>
    <span>
           “USD” 
           “2,175”
    </span>

需要在第二个引号“”中获取文本,在本例中为“2,175”“,我不知道该怎么做。 “USD”和“2,175”都来自 API(它们每次都不同,因此我不能使用 driver.findElement(By.xpath(“xpath 而不是 'USD'),我可以拆分结果,只取必要的部分,但我想知道一种方法,如何从将来的 (2,175) 的第二个括号中获取值。 我在 Intellij 上执行了以下操作

System.out.println(driver.findElement(By.xpath("//div[@class = '_2b9p7-6Tcy_ja6zEhxML2e']//div//span/following-sibling:: span")).getText());

当然,获得全文 - 2,175 美元,但我需要 2,175 美元

Java Selenium 元素 引用 gettext

评论


答:

0赞 undetected Selenium 2/27/2020 #1

若要提取值 2,175,需要诱导 WebDriverWait 以使所需元素可见,并且可以使用以下任一解决方案:

  • 使用 xpath遵循

    WebElement myElement = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[contains(., 'Total')]//following::span[1]")));
    System.out.println(((JavascriptExecutor)driver).executeScript('return arguments[0].lastChild.textContent;', myElement).toString());
    
  • 使用 xpathfollowing-sibling

    WebElement myElement = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[contains(., 'Total')]//following-sibling::span[1]")));
    System.out.println(((JavascriptExecutor)driver).executeScript('return arguments[0].lastChild.textContent;', myElement).toString());
    

评论

0赞 Iskra 2/27/2020
谢谢,但这不适用于我的问题,我知道元素的路径,在这种情况下我不需要等待,我可以打印它,我不需要整个文本,而只需要第二个引号中的部分,我不能使用“textContent”(因为 API),在这种情况下我不需要 JavascriptExecutor。
0赞 Amruta 2/27/2020 #2
driver.findElement(By.xpath("//div[@class = '_2b9p7-6Tcy_ja6zEhxML2e']//div//span/following-sibling:: span")).getText().substring(7, 11);

您可以通过两种方式使用子字符串:

字符串子字符串(int begIndex)

字符串子字符串(int beginIndex, intendIndex)

希望这会有所帮助。

评论

0赞 Iskra 2/27/2020
谢谢,这是一个很好的方法,就我而言,它有效,但我感兴趣的是,例如,如果引号中的字符数量不同,我如何分隔文本。
0赞 mk_ 2/27/2020 #3

对返回的字符串使用 split,如下所示。

String[] amount = returnedText.split(" ");

amount[1] 应该是您必填的文本。

评论

0赞 Iskra 2/27/2020
谢谢,这是一个很好的方法,就我而言,它有效,但我感兴趣的是,例如,如果引号中会有带空格的字符,我如何分隔文本。我认为 selenium 看不到引号,但也许可以通过 javascript 或其他东西找到某种方法。