XPath для относительного элемента в таблице - PullRequest
0 голосов
/ 03 мая 2018

Я использую Java Selenium для открытия ссылок на основе заголовка в качестве входных данных. У меня есть следующая часть HTML, в которой Top 5 Item Exception Types - это заголовок, который мне нужно найти, а его гиперссылка <a class="CatalogActionLink" href="javascript:void(null)">Open</a> находится в другом теге <tr><td><span> рядом с его родственным тегом <tr><td><span>. Как найти гиперссылку Open, выполнив поиск по названию Top 5 Item Exception Types?

<table cellspacing="4" cellpadding="0" border="0">
    <tbody>
        <tr>
            <td class="CatalogObjectListItemIcon" rowspan="2"><img src="/analytics/res/sk_blafp/catalog/obj_request_b.png" alt="Analysis" title="Analysis"></td>
            <td><span class="CatalogObjectListItemTitle">Top 5 Item Exception Types</span>
                <span class="CatalogObjectListItemLastModifiedTime">Last Modified 2/15/2018 12:39:45 PM</span>
                <span class="CatalogObjectListItemOwner">Owner System Account</span>
            </td>
        </tr>
        <tr>
            <td>
                <table cellspacing="0" cellpadding="0">
                    <tbody>
                        <tr>
                            <td><a class="CatalogActionLink" href="javascript:void(null)">Open</a></td>
                            <td><span class="CatalogActionLinkSeparator">&nbsp;</span>
                            </td>
                            <td><a class="CatalogActionLink" href="javascript:void(null)">Edit</a></td>
                            <td><span class="CatalogActionLinkSeparator">&nbsp;</span>
                            </td>
                            <td><a class="CatalogActionLink" href="javascript:void(null)" title="Click to see more actions of Top 5 Item Exception Types">More<img border="0" src="/analytics/res/s_FusionFX/uicomponents/obips.UberBar/dropdown_n.png" alt="Dropdown menu">
                            </a></td>
                        </tr>
                    </tbody>
                </table>
            </td>
        </tr>
    </tbody>
</table>

Я могу найти заголовок используя

WebElement reportElement = driver.findElement(
                    By.xpath("//span[contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),'"
                            + reportName.toLowerCase() + "')]"));

Ответы [ 5 ]

0 голосов
/ 03 мая 2018

Вы можете попробовать этот xpath, он найдет ваш текст и затем вернется на несколько уровней, а затем снова начнет поиск определенного элемента 'a'.

//td/span[contains(text(),'Top 5 Item Exception Types')]/../../..//td/a[text()='Open']
0 голосов
/ 03 мая 2018

Ответы @Grasshopper и @cruisepandey хороши (+1). Это просто более короткая версия для того же:

//tr[.//span='Top 5 Item Exception Types']/following-sibling::tr//a[.='Open']
0 голосов
/ 03 мая 2018

попробуйте это:

//span[text()='Top 5 Item Exception Types']/ancestor::tr/following-sibling::tr/descendant::a[text()='Open']
0 голосов
/ 03 мая 2018

Для идентификации WebElement с текстом, например Открыть , Редактировать или Больше относительно WebElement с текстом Топ 5 типов исключений элементов you может написать функцию, которая будет принимать ссылочный текст, например Лучшие 5 типов исключений элементов и желаемое действие (то есть либо Открыть , Редактировать или More ) в качестве входного аргумента и найдите соответствующий WebElement следующим образом:

public void clickOperation(String title, String operation)
{
    WebElement opsLink = driver.findElement(By.xpath("//td/span[.='" + title + "']//following::tr[1]/td/table/tbody/tr//td/a[@class='CatalogActionLink'][.='" + operation + "']"));
}

Вы можете вызвать функцию clickOperation() вместе со ссылочным текстом, например, Топ 5 типов исключений элементов и требуемую операцию в качестве String аргументов из любого места в вашем скрипте для идентифицируйте соответствующий Ссылка WebElement соответствующего Топ 5 типов исключений элементов элемент следующим образом:

clickOperation("Top 5 Item Exception Types","Open")
// or
clickOperation("Top 5 Item Exception Types","Edit")
// or
clickOperation("Top 5 Item Exception Types","More")
0 голосов
/ 03 мая 2018

Попробуйте этот xpath - "//span[.='Top 5 Item Exception Types']//ancestor::tr/following-sibling::tr//a[.='Open']"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...