简体   繁体   English

Selenium Webdriver:完全读取表

[英]Selenium Webdriver: Read a table completely

Scenerio:In a webpage there are few tables present. Scenerio:在网页中,几乎没有表格。 I want to read one of the table completely, but the problem is only 10 rows are displayed, for rest i have to scroll down. 我想完全阅读一张桌子,但问题是只显示10行,其余的我必须向下滚动。 Actually originally only 10 row are available, when we scroll rest of the filed are rendered. 实际上,当我们滚动其余字段时,实际上最初只有10行可用。 To solve this i thought i will simulate key down and keep reading, but the problem is even the xpath is not consistent through out so cannot put in a loop too. 为了解决这个问题,我想我会模拟键并继续读,但问题是即使是XPath是不是通过了如此一致不能把在一个循环了。 Xpath for few different cells are: 几个不同单元格的Xpath是:

html/body/div[2]/form/div[1]/div[2]/div/div[2]/div/div[2]/div/div[2]/div/div[2]/div/span/div[1]/div/div/div/div[2]/div/div[2]/table/tbody/tr[1]/td[1]

html/body/div[2]/form/div[1]/div[2]/div/div[2]/div/div[2]/div/div[2]/div/div[2]/div/span/div[1]/div/div/div/div[2]/div/div[2]/table[2]/tbody/tr[3]/td[1]

html/body/div[1]/form/div[1]/div[2]/div/div[2]/div/div[2]/div/div[2]/div/div[2]/div/span/div[1]/div/div/div/div[2]/div/div[2]/table[1]/tbody/tr[10]/td[1]

In what way can i get data in all the cells ? 我可以通过什么方式在所有单元格中获取数据?

HTML Source: HTML来源:

    <div id="pt1:ph1" class="x6v">
    <table class="xtb" width="0" cellspacing="0" cellpadding="0" border="0" summary="">
    <div class="xvp">
    <div>
    <div id="pt1:pc1" class="xpb xph" _afrclmwmn="['c1','c2','c3','c4','c5','c6','c7','c8','c9','c10']" _afrac="pt1:pc1:md1" style="height: 282px;">
    <div id="pt1:pc1::_ahTp" style="height:auto">
    <div id="pt1:pc1::_ahCt">
    <div id="pt1:pc1:md1" class="xpj xpb" _leafcolclientids="['pt1:pc1:md1:c1','pt1:pc1:md1:c2','pt1:pc1:md1:c3','pt1:pc1:md1:c4','pt1:pc1:md1:c5','pt1:pc1:md1:c6','pt1:pc1:md1:c7','pt1:pc1:md1:c8','pt1:pc1:md1:c9','pt1:pc1:md1:c10','pt1:pc1:md1:c11','pt1:pc1:md1:c12']" _afrfilterable="true" _afrautohr="10" _afrhcc="0" _afrpcid="pt1:pc1" tabindex="0" style="height: 234px;">
    <div id="pt1:pc1:md1::ch" class="xz5" _afrcolcount="12" style="overflow: hidden; position: relative; width: 753px;">
    <div id="pt1:pc1:md1::db" class="xyy" _afrcolcount="12" style="position: relative; width: 753px; overflow: hidden; height: 170px; z-index: 1;">
    <table class="xyz xzr" cellspacing="0" _startrow="0" _rowcount="44" _selstate="{'0':true}" _totalwidth="1260" style="table-layout:fixed;position:relative;width:1260px;">
    <tbody>
    <tr class="xzn p_AFSelected" _afrrk="0">
    <td class="xzk" nowrap="" style="width:100px;">12</td>
    <td class="xzk" nowrap="" style="width:100px;">A12</td>
    <td class="xzk" nowrap="" style="width:100px;">B12</td>
    <td class="xzk" nowrap="" style="width:100px;">B12</td>
    <td class="xzk" nowrap="" style="width:100px;">C12</td>
    <td class="xzk" nowrap="" style="width:100px;">D12</td>
    <td class="xzk" nowrap="" style="width:100px;"> </td>
    <td class="xzk" nowrap="" style="width:100px;">K12</td>
    <td class="xzk" nowrap="" style="width:100px;"> </td>
    <td class="xzk" nowrap="" style="width:100px;"> </td>
    <td class="xzk" nowrap="" style="width:100px;"> </td>
    <td class="xzk" nowrap="" style="width:100px;">G12</td>
    </tr>
    <tr class="xzn" _afrrk="1">
    <tr class="xzn" _afrrk="2">
    <tr class="xzn" _afrrk="3">
    <tr class="xzn" _afrrk="4">
    <tr class="xzn" _afrrk="5">
    <tr class="xzn" _afrrk="6">
    <tr class="xzn" _afrrk="7">
    <tr class="xzn" _afrrk="8">
    <tr class="xzn" _afrrk="9">
    </tbody>
    </table>
    </div>
    <div id="pt1:pc1:md1::sm" class="xzu" style="position:absolute;display:none"></div>
    <div id="pt1:pc1:md1::ri" class="xz0" style="position:absolute;display:none;overflow:hidden"></div>
    <div id="pt1:pc1:md1::dataW" style="display:none"></div>
    <div id="pt1:pc1:md1::scroller" tabindex="-1" style="position: absolute; overflow: auto; z-index: 0; width: 770px; top: 46px; height: 187px; right: 0px;">
    </div>
    </div>
    <div id="pt1:pc1::_ahBt" style="height:auto">
    <div id="pt1:pc1:_clmCxt" style="display:none">
    <div id="pt1:pc1:_PCPop" style="display:none">
    <div id="pt1:pc1::_dchDlgC" style="display:none">
    </div>
    </div>
    </div>
    </div>

HTML after scrolling. 滚动后的HTML。

    <div id="pt1:ph1" class="x6v">
    <table class="xtb" width="0" cellspacing="0" cellpadding="0" border="0" summary="">
    <div class="xvp">
    <div>
    <div id="pt1:pc1" class="xpb xph" _afrclmwmn="['c1','c2','c3','c4','c5','c6','c7','c8','c9','c10']" _afrac="pt1:pc1:md1" style="height: 282px;">
    <div id="pt1:pc1::_ahTp" style="height:auto">
    <div id="pt1:pc1::_ahCt">
    <div id="pt1:pc1:md1" class="xpj xpb" _leafcolclientids="['pt1:pc1:md1:c1','pt1:pc1:md1:c2','pt1:pc1:md1:c3','pt1:pc1:md1:c4','pt1:pc1:md1:c5','pt1:pc1:md1:c6','pt1:pc1:md1:c7','pt1:pc1:md1:c8','pt1:pc1:md1:c9','pt1:pc1:md1:c10','pt1:pc1:md1:c11','pt1:pc1:md1:c12']" _afrfilterable="true" _afrautohr="10" _afrhcc="0" _afrpcid="pt1:pc1" tabindex="0" style="height: 234px;">
    <div id="pt1:pc1:md1::ch" class="xz5" _afrcolcount="12" style="overflow: hidden; position: relative; width: 753px;">
    <div id="pt1:pc1:md1::db" class="xyy" _afrcolcount="12" style="position: relative; width: 753px; overflow: hidden; height: 170px; z-index: 1;">
    <table class="xyz xzr" cellspacing="0" _startrow="10" _rowcount="44" style="table-layout:fixed;position:relative;width:1260px;">
    <tbody>
    <tr class="p_AFFocused p_AFSelected xzn" _afrrk="10">
    <tr class="xzn" _afrrk="11">
    <tr class="xzn" _afrrk="12">
    <tr class="xzn" _afrrk="13">
    <tr class="xzn" _afrrk="14">
    <tr class="xzn" _afrrk="15">
    <tr class="xzn" _afrrk="16">
    <tr class="xzn" _afrrk="17">
    <tr class="xzn" _afrrk="18">
    <tr class="xzn" _afrrk="19">
    </tbody>
    </table>
    <table class="xyz xzr" cellspacing="0" _startrow="20" _rowcount="44" style="table-layout:fixed;position:relative;width:1260px;">
    </div>
    <div id="pt1:pc1:md1::sm" class="xzu" style="position: absolute; display: none; z-index: 5000; visibility: visible; top: 120px; right: 25px;">Fetching Data...</div>
    <div id="pt1:pc1:md1::ri" class="xz0" style="position:absolute;display:none;overflow:hidden"></div>
    <div id="pt1:pc1:md1::dataW" style="display:none"></div>
    <div id="pt1:pc1:md1::scroller" tabindex="-1" style="position: absolute; overflow: auto; z-index: 0; width: 770px; top: 46px; height: 187px; right: 0px;">
    </div>
    </div>
    <div id="pt1:pc1::_ahBt" style="height:auto">
    <div id="pt1:pc1:_clmCxt" style="display:none">
    <div id="pt1:pc1:_PCPop" style="display:none">
    <div id="pt1:pc1::_dchDlgC" style="display:none">
    </div>
    </div>
    </div>
    </div>
    <div id="pt1:ph2" class="x6v">
    </span>
    </div>
    </div>

try to use this approach: 1) actions builder, advanced user API MoveMouseAction method in particular - Moving the mouse from its current location to another element. 尝试使用这种方法:1)操作生成器,特别是高级用户API MoveMouseAction方法-将鼠标从其当前位置移动到另一个元素。 you can get here more info about actions builder 您可以在此处获取有关操作构建器的更多信息

2) also dont forget to use fluent wait until web element is rendered 2)也不要忘记使用流畅的等待,直到呈现Web元素

public WebElement fluentWait(final By locator){
        Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
                .withTimeout(30, TimeUnit.SECONDS)
                .pollingEvery(5, TimeUnit.SECONDS)
                .ignoring(NoSuchElementException.class);

        WebElement foo = wait.until(
new Function<WebDriver, WebElement>() {
            public WebElement apply(WebDriver driver) {
                        return driver.findElement(locator);
                }
                }
);
                           return  foo;              }     ;

By xpathElem=By.xpath("html/body/div[2]/form/div[1]/div[2]/div/div[2]/div/div[2]/div/div[2]/div/div[2]/div/span/div[1]/div/div/div/div[2]/div/div[2]/table/tbody/tr[1]/td[1]");
//getting data from cells
fluentWait(xpathElem).getText().trim();

hope this somehow helps you ;-) 希望这可以对您有所帮助;-)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM