Как написать универсальный метод findTableRowBy () в Selenium Java? - PullRequest
1 голос
/ 24 октября 2011
<tbody>
    <tr>
        <td>January</td>
        <td>$100</td>
    </tr>
    <tr>
        <td>February</td>
        <td>$80</td>
    </tr>
</tbody>

Как видно из простой таблицы, найти столбец таблицы с текстом, равным «Январь», просто: «tr / td [text () = 'Январь']» Но тд может быть сложным, так как может содержать вложенные элементы. Поэтому нам лучше предоставить другой параметр By.

Мой вопрос заключается в том, как написать общий метод, который может выполнять этот поиск. У меня есть один ниже, но не хорошо, findTableRowsBy (1, By.xpath ("text () = 'January'")) приведет к исключению. Кто-нибудь может помочь мне отполировать этот метод? Большое спасибо.

public List<WebElement> findTableRowsBy( int column, By theBy )
{
    By by = By.xpath( "tbody[1]/tr/td[" + column + "]" );
    List<WebElement> cols = table.findElements( by );
    List<WebElement> rows = new ArrayList<WebElement>();
    for( WebElement e : cols )
    {
        List<WebElement> eles = e.findElements( theBy );
        if( eles.isEmpty() )
            continue;
        if( eles.size() == 1 )
            rows.add( eles.get( 0 ) );
    }
    return rows;
}

1 Ответ

0 голосов
/ 24 октября 2011

Возможно, вы также можете использовать следующий xpath:

//td[contains(text(), "January")]

Полагаю, вы сможете найти правильный тд, даже если в нем есть вложенные элементы.

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