t.me/atinfo_chat Telegram группа по автоматизации тестирования

Поиск элемента в таблице

И сново о локаторах.... Как быть в ситуации,когда есть таблица с данными о пользователях. Нужно для определенного пользователя изменить данные. Для этого мне необходимо в столбце с именами найти именно нужное имя и нажать на него. Проблема в том, что локаторы для всех имен пользователей одинаковы и нету ни id ни name.Как задать чтоб нашло именно по имени?

Локатор на элемент в таблице (имя пользователя)-такой локатор имеют все элементы таблицы в столбце “Имя пользователя”

verifyElementPresent

 css=tr.a2 > td

 

Локатор на таблицу

verifyTable

 css=table.display-table.15.0

username

Локатор на элемент в столбце, который рядом (роль)

verifyElementPresent

 xpath=(//td[@onclick="location.href='/we_webengine_test/Administrator  /UserDetails?userName=username&userId=08d41a1c-fe50-417e- af47-82b9f55d14e6'"])[2]

 

То что записывается  при нажатии на имя пользователя

clickAndWait

 css=tr.a2 > td

 

парсер писать нужно, если явного локатора нету, нужно innerHtml юзать, или css - локатор, Xpath итд

Пользуюсь xPath, ниже маленький пример:

//td/a[@id='username'|text()='Vasia']

да я иногда тоже пользуюсь))))а здесь не могу понять как прописать, что не напишу-оно выдает ошибку что invalid((( можно на моем примере привести путь?спасибо

Стоит пользоваться Firefinder для того чтобы проверять xpaths, а также - Firebug и XPath Checker (все AddOns в Firefox)

съэкономишь тучу времени.  xpath-ами вообше можно чудеса творить

скинь кусок HTML, мож придумаю тебе какое нибудь решение....

Юля, попробуйте искать имя во всех строках нужного столбца.

Например, пусть линки с именем находятся во 2-м столбце таблицы с id="tableID", тогда

List<WebElement> linkList = driver.findElements(By.xpath("//table[@id='tableID']/tbody/tr/td[2]/a"));
// List<WebElement> linkList = driver.findElements(By.cssSelector("table#tableID tbody tr td:nth-child(2) a"));

for (int i = 0; i < linkList.size(); i++) {
    
    WebElement linkElement = linkList.get(i);
    
    if ( linkElement.getText().equalsIgnoreCase("TargetName") ) {
        
        WebElement link = driver.findElement(By.xpath("//table[@id='tableID']/tbody/tr[" + (i+1) + "]/td[2]/a"));
        //WebElement link = driver.findElement(By.cssSelector("table#tableID tbody tr:nth-child(" + (i+1) + ") td:nth-child(2) a"));
        link.click();
    }
        
}

Если таблица без id, можно использовать индекс и для нее, например известно что она 3 по счету тогда xpath = //table[3]/tbody/tr/td[2]/a
 

ребята, вы чему тут девушку учите? начинаете с итераций, потом рекурсии и там глядишь - курить и водку пить научите.

если решение этой задачи занимает больше 3-х строк - то это решение неверно.

а такие за извращения как "//table[@id='tableID']/tbody/tr/td[2]/a" вообще нужно наказывать ссылкой в серверную на 2 часа (прости syelanin, ничего личного)

<tr onmousemove="className='a2'" onmouseout="className='a1'" class="a1">
                        <td onclick="location.href='/we_webengine_test/Administrator/UserDetails?userName=username&amp;userId=08d41a1c-fe50-417e-af47-82b9f55d14e6'">
                            username
                        </td>
                        <td onclick="location.href='/we_webengine_test/Administrator/UserDetails?userName=username&amp;userId=08d41a1c-fe50-417e-af47-82b9f55d14e6'">
Examiner                        </td>
                        <td onclick="location.href='/we_webengine_test/Administrator/UserDetails?userName=username&amp;userId=08d41a1c-fe50-417e-af47-82b9f55d14e6'">
                            Inactive
                        </td>
                        <td onclick="location.href='/we_webengine_test/Administrator/UserDetails?userName=username&amp;userId=08d41a1c-fe50-417e-af47-82b9f55d14e6'">
                            
                        </td>
                        <td onclick="location.href='/we_webengine_test/Administrator/UserDetails?userName=username&amp;userId=08d41a1c-fe50-417e-af47-82b9f55d14e6'">
                            aaa                                               
                        </td>
                        <td onclick="location.href='/we_webengine_test/Administrator/UserDetails?userName=username&amp;userId=08d41a1c-fe50-417e-af47-82b9f55d14e6'">
                            email@email                                       
                        </td>
                        <td onclick="location.href='/we_webengine_test/Administrator/UserDetails?userName=username&amp;userId=08d41a1c-fe50-417e-af47-82b9f55d14e6'">
                            
                        </td>
                        <td onclick="location.href='/we_webengine_test/Administrator/UserDetails?userName=username&amp;userId=08d41a1c-fe50-417e-af47-82b9f55d14e6'">
                            7/9/2012 1:29:18 PM
                        </td>
                        <td>
                                  <input type="button" title="Delete account" value="Delete user" onclick="return confirm('Are you sure you want to delete user?')? submitForm('08d41a1c-fe50-417e-af47-82b9f55d14e6') : false;">
                        </td>
                    </tr>

спасибо всем за желание помочь)

как на счет такой фишки:

...

driver.findElement(By.xpath("//td[text()='username']")).click()

 

если click() будет глючить, поробуй вместо него SendKeys(Keys.ENTER)....

 

самая большая проблема в том что я только начала работу в Selenium IDE, и до уровня selenium driver еще не доросла(((

сорри, не понял что просто Selenium.

да, тогда просто

click //td['username']

 

 

Сейчас попробую)

да не нужно таких сложніх хпасов, потом фиг разберешся, или одна строка в таблице дополнительная и все к черту))

попробуйте универсальней методы, или попроще Xpath

Почему извращения? ) Я общее решение написал. Пусть не 3 строчки, зато конкретное )

Виталик, согласись что не все можно написать в 3 строчки )

Taras, какой Xpath попроще или что за универсальные методы?)

А почему не кликнуть по тексту с именем того самого пользователя?

К примеру найти в таблице уникальный идентификатор юзера - почту, и кликнуть по второй ячейке в строке

//tr[td[contains(text(), '${mail}')]]/td[2]

Юля вам сначала надо посмотреть видео 

пока разработчики все сломали-поэтому возможности проверить предложенные варианты нет) обязательно посмотрю видео,спасибо всем за помощь)

"//table[@id='tableID']/tbody/tr/td[2]/a"

такое не используйте ни в коем случае ))