【问题标题】:Scrolling through and getting the element滚动并获取元素
【发布时间】:2020-11-19 02:08:51
【问题描述】:

我想滚动一个特定的 div 并识别我的元素。 我尝试了所有这些找到的方法 这里我的元素是滚动后我想要的元素

JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("scroll(0, 250)");
utils.doubleClick(myelement);

我也尝试过使用发送键和操作类,但没有任何效果 尽管如此,我还是无法识别我的元素 有人可以建议其他方法吗

<div id="emTemplate:cpTree::db" class="x13q" _afrcolcount="1" style="position: relative; width: 172px; overflow: hidden; height: 246px; z-index: 1;">

    <table cellspacing="0" _rowcount="144" _startrow="91" summary="Target Tree" style="position: relative;">
        <tbody>
            <tr class="xwr" style="padding:0px" _afrap="0_1_2_3" _afrrk="65"></tr>
            <tr class="xwr" style="padding:0px" _afrap="0_1_2_3" _afrrk="66"></tr>
            <tr class="xwr" style="padding:0px" _afrap="0_1_2_3" _afrrk="67"></tr>
            <tr class="xwr" style="padding:0px" _afrap="0_1_2_3" _afrrk="68"></tr>
            <tr class="xwr" style="padding:0px" _afrap="0_1_2_3" _afrrk="69"></tr>
            <tr class="xwr" style="padding:0px" _afrap="0_1_2_3" _afrrk="70"></tr>
            <tr class="xwr" style="padding:0px" _afrap="0_1_2_3" _afrrk="71"></tr>
            <tr class="xwr" style="padding:0px" _afrap="0_1_2_3" _afrrk="72"></tr>
            <tr class="xwr" style="padding:0px" _afrap="0_1_2_3" _afrrk="73"></tr>
            <tr class="xwr" style="padding:0px" _afrap="0_1_2_3" _afrrk="74">
                <td class="x1bv" nowrap="" _afrndcol="1"></td>
            </tr>
            <tr class="xwr" style="padding:0px" _afrap="0_1_2_3" _afrrk="75">
                <td class="x1bv" nowrap="" _afrndcol="1">
                    <div style="padding-left:64px;white-space:nowrap;"></div>
                </td>
            </tr>
            <tr class="xwr" style="padding:0px" _afrap="0_1_2_3" _afrrk="76">
                <td class="x1bv" nowrap="" _afrndcol="1">
                    <div style="padding-left:64px;white-space:nowrap;">
                        <span class="xx0" _afrnddth="4" _afrdisimg="0"></span>
                        <span id="emTemplate:cpTree:76:grypgl1" class="x1a">
                            <img id="emTemplate:cpTree:76:gryi1" class="xni" src="/em/images/soacomposite_ena.png" style="width:16px; height:16px; margin-right:3px; vertical-align:middle; cursor:pointer" alt="Oracle SOA Composite" title="Oracle SOA Composite"></img>
                            <span class="xe5" _afrndtxt="1">
                                <span id="emTemplate:cpTree:76:targetLink" class="" style="color: rgb(0, 42, 144); cursor: text;" title="/Farm_SOADomain/SOADomain/wls_soa1/default/PublishActualizedShipCost [2.1]"></span>
PublishActualizedShipCost [2.1]

这是 DOM,使用的 xpath 是:

//div[@id='emTemplate:cpTree::db']/table/tbody//tr/td/div/span/span/span[.='PublishActualizedShipCost [2.1]']

此外,没有 iframe 作为索引 tr[1],tr[2] 上的元素,所有无需滚动即可看到的元素,我只需更改文本即可轻松识别。

【问题讨论】:

    标签: java selenium automation


    【解决方案1】:
    JavascriptExecutor jse = (JavascriptExecutor)driver;
    jse.executeScript("arguments[0].scrollIntoView(false);", myelement);
    

    上面的代码应该可以很好地滚动到元素。让我知道这是否有帮助!

    如果您尝试滚动到 250 高度,则需要执行以下操作:

    long scrollHeight = 250;
    JavascriptExecutor jse = (JavascriptExecutor)driver;
    jse.executeScript("window.scrollTo(0, document.body.scrollHeight);");
    

    【讨论】:

    • 在这段代码之前我必须写 Webelement myelement = driver.findelement(By.xpath("");
    • 但是如果我这样写它会失败,只会说找不到元素
    • 在这种情况下,您是否使用等待页面加载?因为,未找到元素表示它不在 dom 中
    • 这个我的元素将包含 div 的 xpath 或滚动 div 后我想要的元素?
    • 要滚动到的元素。如果元素与 div 一起使用,则 div 将起作用
    【解决方案2】:

    您可以使用 scrollIntoView 滚动页面直到找到元素

    WebDriverWait wait = new WebDriverWait(Scenario1Test.driver, 10); 
    WebElement Element= wait.until(ExpectedConditions.elementToBeClickable(By.xpath(" your xpath")));
          
    JavascriptExecutor js = (JavascriptExecutor) driver;      
    js.executeScript("arguments[0].scrollIntoView();", Element);
    

    【讨论】:

    • 我也试过这个。但它会抛出无法找到元素,因为元素向下,只有在我滚动后才会被识别。
    • 你能分享 url 来复制这个问题吗?
    • 其实可以通过一些VPN访问
    • 等待元素可点击:By.xpath("')(尝试 10 秒,间隔 500 毫秒)得到这个
    • 我检查过了,因为没有滚动的元素很容易识别,因此我认为框架不是问题。
    猜你喜欢
    • 1970-01-01
    • 2012-04-07
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多