Ошибка element is not attached to the page document

selenium
Теги: #<Tag:0x00007fedb84be120>

(Alex Alex) #1

Проблема (Вопрос) заключается …
Хочу написать простой тест, заходим на страницу гмейла и логинимся под своими данными.
Набросал код. Удалось зайти на гмейл сайт, ввести емейл, нажать кнопку далее, дальше меня перекинуло на страницу ввода пароля и вот тут то ошибка, которую выкидывает Java. Прилагаю мой код, если можете запустите его у себя и подскажите как быть? Я всего второй день сижу с Селениумом, поэтому пока совсем новичок в этом.
Я попытался сделать …

У меня получилось …

У меня не получилось …

Код

driver.get(gmailUrl);
WebElement elLogin = driver.findElement(By.cssSelector(“input#identifierId”));
elLogin.sendKeys(gmailLogin);
WebElement elClick = driver.findElement(By.xpath("//content/span[contains(text(),‘Next’)]"));
elClick.click();

WebElement elPass =      driver.findElement(By.cssSelector("input.whsOnd.zHQkBf"));
//String pass = elPass.getTagName();
//System.out.println(pass);
//WebDriverWait wait = new WebDriverWait(driver, 5);
Thread.sleep(2000);
elPass.sendKeys(gmailPassword);
code

Логи и ошибка вот такая …
element is not attached to the page document

Версии ОС и софта следующие …


(Taras) #2

селектор плохой, цепляет другой елемент которий “отвалился” от DOM-а


(Alex Alex) #3

Вряд ли, вот я сделал по TagName
WebElement elPass = driver.findElement(By.tagName(“input”));
Thread.sleep(7000);
elPass.sendKeys(gmailPassword);
Но на третей строке кода вылетает ошибка… Не могу разобраться, можете помочь?


(Taras) #4

Ви вообще понимаете какой Ви локатор написали по тег нейму ?)


(Alex Alex) #5

Извините я всего второй день сижу с селениумом, поэтому я даже вопрос ваш не понял . Вы можете помочь с решением моей проблемы ? После этого мне стало бы понятно , в чем проблема и в будущем я уже бы знал решение


(Taras) #6

проблема в локаторе 100% - каким плагином для браузера Ви пользуетесь для поиска елементов ?


(Alex Alex) #7

Что такое локатор? CSS селектор ?
Пользуюсь google chrome driver последней версии.
Но селектор у меня точно правильный , я даже распечатывал - распечатывается инпут тег, все нормально


(Taras) #8

почитайте сначала что такое идентификатори елементов - css selector , xpath итд - ето какой то кривой селектор “input.whsOnd.zHQkBf”


(Taras) #9

input[name=‘password’][type=‘password’] должен работать, Ви может еще с вейтами накосячили - implicit wait поставьте


(Alex Alex) #10

Попробовал driver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS); - резулат тот же самый.

Вы можете мой код запустить у себя и посмотреть? Я еще раз повторюсь, что вот эта строка работает
WebElement elPass = driver.findElement(By.tagName(“input”));
Потому что тест у меня ПАССЕД до этого шага. Проблема начинается тут
elPass.sendKeys(gmailPassword);

Вот мой полный код

static String gmailLogin = "mygmail";
static String gmailPassword = "mypassword";

    public void gmailLogin() throws InterruptedException{
	driver.get(gmailUrl);
	WebElement elLogin = driver.findElement(By.cssSelector("input#identifierId"));
	elLogin.sendKeys(gmailLogin);
	WebElement elClick = 
    driver.findElement(By.xpath("//content/span[contains(text(),'Next')]"));
	elClick.click();


	WebElement elPass = driver.findElement(By.tagName("input"));

	//WebDriverWait wait = new WebDriverWait(driver, 5);
	Thread.sleep(7000);
	//driver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);

	elPass.sendKeys(gmailPassword);


	elClick.click();
}

Попробуйте запустить пожалуйста


(Maxim Karpenko) #11

Таки да, падает, потому как поиск по tagName(“input”) находит несколько таких элементов, и клик явно уходит не тому, которому нужно. Если указать конктетный инпут через cssSelector(“input[name=‘password’]”), то тест проходит.

Рекомендую поизучать селекторы (xpath, css) и в коде указывать максимально уникальный селектор.


(Богдан Ткаченко) #12

//input[@id=‘identifierId’] xpath для поля логин
//div[@id=‘identifierNext’] xpath для кнопки next
//input[@type=‘password’] xpath для поля пароля
//div[@id=‘passwordNext’] xpath для кнопи next пароль

как тебе уже написали почитай про то как создать xpath и css selector


(Alex Alex) #13

Спасибо! Заработало! Но на странице был только один инпут, почему не работал мой код мне интересно?


(Alex Alex) #14

WebElement elClick2 = driver.findElement(By.xpath(“div[@id=‘passwordNext’]”));
elClick2.click();

Получаю такую ошибку
Unable to locate element: {“method”:“xpath”,“selector”:“div[@id=‘passwordNext’]”}


(Alex Alex) #15

Нашел свою ошибку


(Alex Alex) #16

Залогиниося в гмейл и сейчас пробую нажать на крайнюю правую кнопку, чтобы посмотреть емейл, но получаю ошибку
WebElement elEl = driver.findElement(By.xpath("//span[@class=‘gb_db’]"));
Что не так с моим кодом?


(Maxim Karpenko) #17

Был один, а стало несколько, добро пожаловать в красочный мир ajax-а :slight_smile:

А по поводу последней ошибки, так там xpath неправильный, Вы ищете вот этот элемент (как я понял)

<span class="gb_db gbii"></span>

Как только разберётесь с локаторами - половина проблем отпадёт.


(Taras) #18

клас лучше всего вседа проверять через contains - какая ошибка ?


(Alex Alex) #19

Сделал так - заработало.

   WebElement elEmail = driver.findElement(By.xpath("//div/div/div[@class='gb_Ib']"));
	String email = elEmail.getText();
	assertEquals(gmailLogin, email);

(Alex Alex) #20

Можете дать пример как проверять через Contains и в каких случаях это надо?