簡體   English   中英

如何在Java中使用Selenium從Tooltip獲取文本?

[英]How to get Text from Tooltip using Selenium in Java?

我正在嘗試使用Java獲取工具提示的文本

奇怪的是,我得到了范圍的任何屬性,甚至是TagName() ,但是當使用getText()時卻得到了一個空String

HTML代碼:

<div id="currentRebalancing1">
    <div class="chart" id="donutCR1" data-highcharts-chart="8">
        <div id="highcharts-cva4evt-30"
             style="position: relative; overflow: hidden; width: 400px; height: 570px; text-align: left; line-height: normal; z-index: 0; left: 0.0999756px; top: 0.683334px;"
             class="highcharts-container ">
            <svg version="1.1" class="highcharts-root " width="400" height="570" viewBox="0 0 400 570">
                <g class="highcharts-series-group">
                    <g class="highcharts-series highcharts-series-0 highcharts-pie-series highcharts-color-undefined highcharts-tracker "
                       transform="translate(10,47) scale(1 1)">
                        <path fill="RGB(19,37,91)"
                              d="M 206.97372615672333 91.00000267563894 A 129 129 0 1 1 79.03227795957477 236.2868694286062 L 130.21936677574485 229.77212165716372 A 77.4 77.4 0 1 0 206.984235694034 142.60000160538334 Z"
                              transform="translate(0,0)" stroke="#ffffff" stroke-width="1" stroke-linejoin="round"
                              class="highcharts-point highcharts-color-0 "></path>
                        <path fill="RGB(226,0,121)"
                              d="M 79.01605507671634 236.1588935844597 A 129 129 0 0 1 97.18697447921456 152.30879358460714 L 141.11218468752872 179.38527615076427 A 77.4 77.4 0 0 0 130.2096330460298 229.69533615067581 Z"
                              transform="translate(0,0)" stroke="#ffffff" stroke-width="1" stroke-linejoin="round"
                              class="highcharts-point highcharts-color-1 "></path>
                        <path fill="RGB(230,45,140)"
                              d="M 97.25472058085626 152.1990144229889 A 129 129 0 0 1 206.82082158798877 91.00012443766983 L 206.89249295279325 142.60007466260188 A 77.4 77.4 0 0 0 141.15283234851375 179.31940865379335 Z"
                              transform="translate(0,0)" stroke="#ffffff" stroke-width="1" stroke-linejoin="round"
                              class="highcharts-point highcharts-color-2 "></path>
                    </g>
                    <g class="highcharts-markers highcharts-series-0 highcharts-pie-series highcharts-color-undefined "
                       transform="translate(10,47) scale(1 1)"></g>
            </svg>
            <div class="highcharts-label highcharts-tooltip"
                 style="position: absolute; left: 160px; top: -9999px; opacity: 0; pointer-events: none; visibility: visible;">
                <span style="font-family: &quot;Lucida Grande&quot;, &quot;Lucida Sans Unicode&quot;, Arial, Helvetica, sans-serif; font-size: 12px; position: absolute; white-space: nowrap; color: rgb(51, 51, 51); margin-left: 0px; margin-top: 0px; left: 8px; top: 8px;">
                Carmignac Sécurité A EUR Acc  
                    <b>73.00%</b>
                </span>
            </div>
        </div>
    </div>
</div>

Java代碼:

s_Path = "//*[@id='currentRebalancing1']//*[contains(@class,'highcharts-point highcharts-color-0')]";

Actions builder = new Actions(driver);
WebElement w_AssetWeight = driver.findElement(By.xpath(s_Path));
                builder.moveToElement(w_AssetWeight).build().perform();
Thread.sleep(2000);

s_Path = "//*[@id='currentRebalancing1']//div[contains(@class, 'highcharts-label')]//*[contains(. , 'Carmignac')]";

String s_Result = driver.findElement(By.xpath(s_Path)).getAttribute("style");
// Here s_Result has the value of 'Style'
s_Result = driver.findElement(By.xpath(s_Path)).getTagName();
// Here s_Result = "span"
s_Result = driver.findElement(By.xpath(s_Path)).getText();
//Here s_Result = "" instead of "Carmignac Sécurité A EUR Acc 73.00%"

s_Result的第一個值符合預期。

s_Result的第二個值是“ span”(符合預期)。

s_Result的第三個值是“”(預期為“ CarmignacSécuritéA EUR Acc。73.00%”)

期望的元素是動態元素,因此要提取工具提示,您需要為WebViewrElementLocated visibilityOfElementLocated()引入WebDriverWait ,並且可以使用以下任何一種Locator Strategies

  • cssSelector

     System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("div#currentRebalancing1 div.highcharts-label.highcharts-tooltip"))).getText()); 
  • xpath

     System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@id='currentRebalancing1']//div[@class='highcharts-label highcharts-tooltip']"))).getText()); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM