[Resolved] Как обработать в селениуме ссылку href ?

Для обработки

 <A href="javascript:__doPostBack('ctl16$ctl00','')">Logout</A>  

использую

driver.findElement(By.linkText("Logout")).click();

но кнопка так и не жмакается. В чем ошибка? Как можно обработать в selenium данный случай. Спасибо.

А просто по локатору пробовали?

Например?

Для примера предоставлено слишком мало кода страницы. Возможно ссылка в div’e или еще где, может в элементе с конкретным id. Тогда от окружающих элементов строим однозначный локатор до ссылки.

Вот пример кода:

    public void testSample() throws Exception {
        
                driver.get(baseUrl);
                driver.findElement(By.id("loginContainer_username")).clear();
                driver.findElement(By.id("loginContainer_username")).sendKeys("qa1");
                driver.findElement(By.id("loginContainer_password")).clear();
                driver.findElement(By.id("loginContainer_password")).sendKeys("qa1");
                driver.findElement(By.name("loginContainer$ctl05")).click();
                driver.findElement(By.linkText("Logout")).click();
    }

id для Logout не могу найти((

<tr>
<td class="userinfo noWrap="nowrap" roSpan="1" colSpan="1">
<A href="javascript:__doPostBack('ctl16$ctl00','')">Logout</A>
<A href="javascript:__doPostBack('ctl16$ctl01','')">Profile</A>
</td>
</tr>

Если ссылка с текстом Logout на странице одна, должно и так находиться. Ошибки во время выполнения этого действия возникают?

Вот такая ошибка

org.openqa.selenium.NoSuchElementException: Unable to find element with link text == Logout (WARNING: The server did not provide any stacktrace information)

Два наиболее вероятных варианта: или ссылка в айфрейме. Или она просто не успевает появиться в коде страницы.

“Или она просто не успевает появиться в коде страницы.” - Как сделать чтобы она появилась или успела появиться?

Добавить ожидание. Например,
new WebDriverWait(driver, 5).until(ExpectedConditions.presenceOfElementLocated(By.linkText(“Logout”)));
Но лучше бы увидеть живую страницу. Если что-то не публичное, можно ссылку в лс.

К сожалению, часть кода:

new WebDriverWait(driver, 5).until(ExpectedConditions.presenceOfElementLocated(By.linkText("Logout")));

не решило проблему((
Ссылку тоже скинуть не могу, так как веб приложение развернуто на тестовом стенде, внутри корпоративной сети.

Мне кажется что там нужно использовать By.xpath, но то что я пишу:

driver.findElement(By.xpath("//*[@value='Logout']")).click();

пока тоже не работает

Тут не смогут помочь, пока ты либо не выложишь всю html страницу, либо не дашь на нее ссылку. Исходя из того что ты описал должно работать:

   driver.findElement(By.linkText("Logout")).click();

Если же нет, предоставь еще информацию.

Вообще не зацикливайся на поиске одного способа найти элемент. Почему например не

   driver.findElement(By.cssSelector("a:nth-child(1)")).click();

или не что-то производное с другими элементами?

Кстати, да. Можно сохранить страницу(лучше со стилями) в момент, когда пользователь уже авторизован и скинуть её сюда.

Должно быть так: //a[text()=‘Logout’] Но это аналогично By.linkText

derom, СПАСИБО!!! Заработало!!! С меня пиво!))

Можно немного оффтопа?
Почему ваши разработчики выбрали такой странный способ запуска JavaScript через протокол javascript: внутри href, а не через onclick?

это же postback, asp.net (Generating Client-Side Script for Postback | Microsoft Learn)
тем более событийная модель через прямые onlick onmouseover и тд - 2000 год в разработке, все давно делается через addEventListener (postback по сути так и сделан, глубоко внутри)

1 лайк