Для обработки
<A href="javascript:__doPostBack('ctl16$ctl00','')">Logout</A>
использую
driver.findElement(By.linkText("Logout")).click();
но кнопка так и не жмакается. В чем ошибка? Как можно обработать в selenium данный случай. Спасибо.
Keiga
(Keiga)
January 29, 2015, 10:12am
#2
А просто по локатору пробовали?
Keiga
(Keiga)
January 29, 2015, 10:28am
#4
Для примера предоставлено слишком мало кода страницы. Возможно ссылка в 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>
derom
(Derom)
January 29, 2015, 11:10am
#6
Если ссылка с текстом Logout на странице одна, должно и так находиться. Ошибки во время выполнения этого действия возникают?
Вот такая ошибка
org.openqa.selenium.NoSuchElementException: Unable to find element with link text == Logout (WARNING: The server did not provide any stacktrace information)
derom
(Derom)
January 29, 2015, 12:20pm
#8
Два наиболее вероятных варианта: или ссылка в айфрейме. Или она просто не успевает появиться в коде страницы.
“Или она просто не успевает появиться в коде страницы.” - Как сделать чтобы она появилась или успела появиться?
derom
(Derom)
January 29, 2015, 12:30pm
#10
Добавить ожидание. Например,
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();
пока тоже не работает
st_eremin
(Stan)
January 29, 2015, 12:48pm
#12
Тут не смогут помочь, пока ты либо не выложишь всю html страницу, либо не дашь на нее ссылку. Исходя из того что ты описал должно работать:
driver.findElement(By.linkText("Logout")).click();
Если же нет, предоставь еще информацию.
Вообще не зацикливайся на поиске одного способа найти элемент. Почему например не
driver.findElement(By.cssSelector("a:nth-child(1)")).click();
или не что-то производное с другими элементами?
derom
(Derom)
January 29, 2015, 12:54pm
#13
Кстати, да. Можно сохранить страницу(лучше со стилями) в момент, когда пользователь уже авторизован и скинуть её сюда.
derom
(Derom)
January 29, 2015, 12:58pm
#14
testmsg777:
Мне кажется что там нужно использовать By.xpath, но то что я пишу:
driver.findElement(By.xpath("//*[@value=‘Logout’]")).click();
пока тоже не работает
Должно быть так: //a[text()=‘Logout’] Но это аналогично By.linkText
derom, СПАСИБО!!! Заработало!!! С меня пиво!))
TIT
(Сергей Блохин)
January 30, 2015, 8:12am
#16
Можно немного оффтопа?
Почему ваши разработчики выбрали такой странный способ запуска JavaScript через протокол javascript: внутри href, а не через onclick?
st_eremin
(Stan)
January 30, 2015, 9:00am
#17
testmsg777:
javascript:__doPostBack
это же postback, asp.net (Generating Client-Side Script for Postback | Microsoft Learn )
тем более событийная модель через прямые onlick onmouseover и тд - 2000 год в разработке, все давно делается через addEventListener (postback по сути так и сделан, глубоко внутри)
1 Like