java - 即使元素可见,WebElement getText() 返回空字符串

标签 java xpath selenium selenium-webdriver

我很难检索元素的文本,由于某种原因,WebDriver 可以找到该元素,但无法检索文本,我怀疑是因为由于某种原因该元素对 WebDriver 不可见,我稍后会讲到这一点。

这是 HTML 片段:

<td id="x-auto-4169" class="x-grid3-col x-grid3-cell x-grid3-td-badCalls " style="width:53px;" role="gridcell">
    <div class="x-grid3-cell-inner x-grid3-col-badCalls" unselectable="on">0</div>
</td>

到达此位置的 Xpath 是

String valueXpath = "((//div[@id=\"QosDashpardPanelBottom\"]//div[@id=\"CollectorQoSPerformanceMetricsgrid\"]//div[contains(@class, \"x-grid3-row  x-unselectable-single\")])[" + j + "]//div)[" + i + "]";
WebElement value = driver.findElement(By.xpath(valueXpath));

其中“j”是表/网格中的行号,“i”是列号。我知道 Selenium 可以找到该元素,因为我可以做到

WebElement class = driver.findElement(By.xpath(fullXpath));
String classAttr = arg.getAttribute("class");

我回来了

x-grid3-cell-inner x-grid3-col-badCalls

但是当我尝试

String cellValue = value.getText();
System.out.println(cellValue);

我得到一个空字符串。我盯着我的电脑屏幕,我可以看到该值,它是可见的,我知道 Selenium 找到了该元素,但我无法检索文本。有趣的是,有人建议首先单击该值,然后尝试 getText(),因此当我尝试单击时,出现了异常:

org.openqa.selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with

所以我想知道我是否无法检索文本值,因为它不可见?但是,如果是这种情况,我可以检索类属性、标签等内容,但不能检索文本值,这似乎很奇怪。

如有任何建议,我们将不胜感激。

HTML:

<body class=" ext-gecko ext-windows" onload="processLoaders();">
<script type="text/javascript">
<div id="topNavDiv" style="height: 90px">
<div id="bodyContentOuter" style="width: 1280px; height: 587px;">
    <div id="bodyContentInner">
        <script src="RLT/RLT.nocache.js" language="javascript" type="text/javascript">
        <script defer="defer">
        <script language="javascript" type="text/javascript">
        <div id="rtcpMain" class=" x-component x-border-layout-ct" style="width: 1280px; height: 587px;">
            <div id="rtcpMainWest" class=" x-panel x-component x-border-panel" style="left: 5px; top: 5px; width: 225px;">
            <div id="x-auto-2" class=" x-tab-panel x-component x-border-panel" tabindex="0" hidefocus="true" style="left: 235px; top: 5px; width: 1040px;">
                <div class="x-tab-panel-header x-unselectable" style="width: 1038px;" unselectable="on">
                <div class="tone-rtcp-tabbed-content-panel" style="width: 1040px; height: 550px;">
                    <div id="x-auto-10" class=" x-component" style="overflow: auto; width: 1040px; height: 550px;">
                        <div id="QosDashboardPanel0" class=" x-panel x-component" style="width: 1040px;">
                            <div id="x-auto-13" class=" x-small-editor x-panel-header x-component x-hide-display" role="presentation">
                            <div id="rtcpDPBWrap" class="x-panel-bwrap" role="presentation" style="overflow: visible;">
                                <div class="x-panel-tbar x-panel-tbar-noheader" role="presentation" style="width: 1040px;">
                                <div id="rtcpDPBody" class="x-panel-body x-panel-body-noheader x-border-layout-ct" role="presentation" style="width: 1038px; height: 700px;">
                                    <div id="QosDashboardPanelTop" class=" x-component x-border-panel x-border-layout-ct" style="left: 0px; top: 0px; width: 1038px; height: 400px;">
                                    <div id="QosDashpardPanelBottom" class=" x-component x-border-panel x-border-layout-ct" style="left: 1px; top: 401px; width: 1036px; height: 298px;">
                                        <div id="QosDashpardPanel_pqosChartsLC" class=" x-component x-border-panel x-border-layout-ct x-hide-display" style="left: 0px; top: 0px; width: 1036px; height: 400px;">
                                        <div id="QosDashpardPanel_metricsTablesLC" class=" x-component x-border-panel x-border-layout-ct" style="left: 1px; top: 1px; width: 1034px; height: 296px;">
                                            <div id="CollectorMetrics_toneletWrapper" class=" x-panel x-component x-border-panel" style="left: 1px; top: 1px; width: 330px;">
                                                <div id="x-auto-99" class=" x-small-editor x-panel-header x-component x-hide-display" role="presentation">
                                                <div class="x-panel-bwrap" role="presentation">
                                                    <div class="x-panel-body x-panel-body-noheader" role="presentation" style="width: 328px; height: 292px;">
                                                        <div id="CollectorMetrics" class=" x-panel x-component" style="width: 328px;">
                                                            <div id="x-auto-109" class=" x-small-editor x-panel-header x-component x-unselectable" role="presentation" unselectable="on">
                                                            <div class="x-panel-bwrap" role="presentation">
                                                                <div class="x-panel-body" role="presentation" style="width: 326px; height: 265px;">
                                                                    <div id="CollectorQoSPerformanceMetricsgrid" class=" x-grid-panel x-component" style="position: relative; width: 326px; height: 265px;" tabindex="0" hidefocus="true" unselectable="">
                                                                        <div class="x-grid3" role="presentation" style="width: 326px; height: 265px;">
                                                                            <div class="x-grid3-viewport" role="presentation">
                                                                                <div class="x-grid3-header" role="presentation">
                                                                                <div class="x-grid3-scroller" role="presentation" style="width: 326px; height: 243px;">
                                                                                    <div class="x-grid3-body" role="presentation">
                                                                                        <div id="CollectorQoSPerformanceMetricsgrid_x-auto-633" class="x-grid3-row x-unselectable-single x-grid3-row-selected x-grid3-highlightrow " style="width:510px;">
                                                                                            <table class="x-grid3-row-table" cellspacing="0" cellpadding="0" border="0" style="width:510px;" role="presentation">
                                                                                                <tbody role="presentation">
                                                                                                    <tr role="presentation">
                                                                                                        <td id="x-auto-634" class="x-grid3-col x-grid3-cell x-grid3-td-name x-grid-cell-first " style="width:148px;" role="gridcell">
                                                                                                            <div class="x-grid3-cell-inner x-grid3-col-name" unselectable="on">
                                                                                                                <u>Lync</u>
                                                                                                            </div>
                                                                                                        </td>
                                                                                                        <td id="x-auto-635" class="x-grid3-col x-grid3-cell x-grid3-td-badCalls " style="width:53px;" role="gridcell">
                                                                                                            <div class="x-grid3-cell-inner x-grid3-col-badCalls" unselectable="on">36</div>
                                                                                                        </td>
                                                                                                        <td id="x-auto-636" class="x-grid3-col x-grid3-cell x-grid3-td-totalCalls " style="width:58px;" role="gridcell">
                                                                                                            <div class="x-grid3-cell-inner x-grid3-col-totalCalls" unselectable="on">120</div>
                                                                                                        </td>
                                                                                                        <td id="x-auto-637" class="x-grid3-col x-grid3-cell x-grid3-td-avgLatency " style="width:73px;" role="gridcell">
                                                                                                            <div class="x-grid3-cell-inner x-grid3-col-avgLatency" unselectable="on">223</div>
                                                                                                        </td>
                                                                                                        <td id="x-auto-638" class="x-grid3-col x-grid3-cell x-grid3-td-avgLoss " style="width:53px;" role="gridcell">
                                                                                                            <div class="x-grid3-cell-inner x-grid3-col-avgLoss" unselectable="on">0.80</div>
                                                                                                        </td>
                                                                                                        <td id="x-auto-639" class="x-grid3-col x-grid3-cell x-grid3-td-avgJitter " style="width:58px;" role="gridcell">
                                                                                                            <div class="x-grid3-cell-inner x-grid3-col-avgJitter" unselectable="on">29</div>
                                                                                                        </td>
                                                                                                        <td id="x-auto-640" class="x-grid3-col x-grid3-cell x-grid3-td-avgMOS x-grid3-cell-last " style="width:53px;" role="gridcell">
                                                                                                            <div class="x-grid3-cell-inner x-grid3-col-avgMOS" unselectable="on">3.86</div>
                                                                                                        </td>
                                                                                                    </tr>
                                                                                                </tbody>
                                                                                            </table>
                                                                                        </div>
                                                                                        <div id="CollectorQoSPerformanceMetricsgrid_x-auto-641" class="x-grid3-row x-unselectable-single " style="width:510px;">
                                                                                            <table class="x-grid3-row-table" cellspacing="0" cellpadding="0" border="0" style="width:510px;" role="presentation">
                                                                                                <tbody role="presentation">
                                                                                                    <tr role="presentation">
                                                                                                    <td id="x-auto-642" class="x-grid3-col x-grid3-cell x-grid3-td-name x-grid-cell-first " style="width:148px;" role="gridcell">
                                                                                                        <div class="x-grid3-cell-inner x-grid3-col-name" unselectable="on">
                                                                                                            <u>CUCM-Publisher</u>
                                                                                                        </div>
                                                                                                    </td>
                                                                                                    <td id="x-auto-643" class="x-grid3-col x-grid3-cell x-grid3-td-badCalls " style="width:53px;" role="gridcell">
                                                                                                        <div class="x-grid3-cell-inner x-grid3-col-badCalls" unselectable="on">3</div>
                                                                                                    </td>
                                                                                                    <td id="x-auto-644" class="x-grid3-col x-grid3-cell x-grid3-td-totalCalls " style="width:58px;" role="gridcell">
                                                                                                        <div class="x-grid3-cell-inner x-grid3-col-totalCalls" unselectable="on">52</div>
                                                                                                    </td>
                                                                                                    <td id="x-auto-645" class="x-grid3-col x-grid3-cell x-grid3-td-avgLatency " style="width:73px;" role="gridcell">
                                                                                                        <div class="x-grid3-cell-inner x-grid3-col-avgLatency" unselectable="on">190</div>
                                                                                                    </td>
                                                                                                    <td id="x-auto-646" class="x-grid3-col x-grid3-cell x-grid3-td-avgLoss " style="width:53px;" role="gridcell">
                                                                                                        <div class="x-grid3-cell-inner x-grid3-col-avgLoss" unselectable="on">0.79</div>
                                                                                                    </td>
                                                                                                    <td id="x-auto-647" class="x-grid3-col x-grid3-cell x-grid3-td-avgJitter " style="width:58px;" role="gridcell">
                                                                                                        <div class="x-grid3-cell-inner x-grid3-col-avgJitter" unselectable="on">31</div>
                                                                                                    </td>
                                                                                                    <td id="x-auto-648" class="x-grid3-col x-grid3-cell x-grid3-td-avgMOS x-grid3-cell-last " style="width:53px;" role="gridcell">
                                                                                                        <div class="x-grid3-cell-inner x-grid3-col-avgMOS" unselectable="on">3.98</div>
                                                                                                    </td>
                                                                                                    </tr>
                                                                                                </tbody>
                                                                                            </table>
                                                                                        </div>
                                                                                    </div>                                                                                                          

最佳答案

经过多次故障排除后,我发现我的 Xpath 上有一个小错误。来 self 的 html

<div id="QosDashboardPanel0" ...

我没有考虑多个选项卡。在我的 AUT 中,我打开了一个新选项卡,不是新的浏览器选项卡,而是应用程序本身的选项卡,整个 Hmtl 将保持不变,除了上面的代码片段将更改为

<div id="QosDashboardPanel1" ...

我假设 ID 不会改变,吸取教训!这就是为什么我遇到“无法单击不可见元素”的情况,该元素实际上在那里,但它隐藏在我的 Activity 选项卡后面。

这不是一个很好的解决方案,但我希望如果有人遇到类似的事情,这至少可以为他们指明正确的方向或敲响警钟。

关于java - 即使元素可见,WebElement getText() 返回空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14844214/

相关文章:

java - Jung FXLayout 未定位顶点

java - 如何在 Apache Beam 项目中直接使用 google-cloud-storage

Java通过MouseEvent访问点击JButton的公共(public)方法

ruby - 如何在 nokogiri xpath 中使用正则表达式

javascript - 通过CSS获取css值并在Selenium中使用

Java:当锁为空时,为什么这是一个死锁?

xml - XPATH 返回没有子标签和特定值的子标签

javax.swing.tree.TreePath 选择 XPath 查询字符串

java - SeleniumError : org. openqa.selenium.SessionNotCreatedException

java - 如何从多行字符串输出中获取字符串的多个实例