Selenium i gmail
#1
Отправлено 16 октября 2009 - 21:59
Уже каторий день сижу и никак не получается с помощю селениума (рц) отослать письмо на гмейле - обичном не html версии.
Вся фишка в том что никакая тулка неможет толком показать ід кнопочки Send
уже незнаю что и делать - вся надежда на вас гуру
#2
Отправлено 19 октября 2009 - 07:18
Всем доброй ночи
Уже каторий день сижу и никак не получается с помощю селениума (рц) отослать письмо на гмейле - обичном не html версии.
Вся фишка в том что никакая тулка неможет толком показать ід кнопочки Send
уже незнаю что и делать - вся надежда на вас гуру
Просто этого параметра нет для этой кнопки. Пользуйся не доступом по id, т.к. его там нет. А Xpath объекта. Например, абсолютным -/html/body/div[1]/div[2]/div/div[2]/div[1]/div[3]/div[1]/div/div/div[2]/div/div/div/div/div[2]/div/div[2]/div/div/div/div[1]/div[@id=':4l']/div/div/div[@id=':2k']/div[@id=':2h']/div/div/div/div[2]/b
Это ненадежно ибо может поменяться любой элемент и тогда путь не правильный.
Но выкручиваться надо и более надежный способ - найти ближайший "стабильный" элемент (у которого есть id) и прописать от него относительный путь. Звучать будет как: //div[@id=':2h']/div/div/div/div[2]/b. если вдруг добавят еще где-то дивов, то можешь прописать еще и явно номера div в дереве: //div[@id=':2h']/div[1]/div[1]/div[1]/div[2]/b[1].
Это если полно. А если кратко:
Пользуй как Click("//div[@id=':2h']/div[1]/div[1]/div[1]/div[2]/b[1]").
З.Ы. Перестанет работать пересмотри путь в DOM Inspector + XPather
#3
Отправлено 19 октября 2009 - 08:30
прописивал и полний путь и относительний
ничего не получается - после клика ничего не происходит, даже не знаю куда дальше копать:(
Код прикрепил - может кто помочь?
public void sentMail() throws Exception { selenium.selectFrame("relative=top"); selenium.selectFrame("id=canvas_frame"); getScreen(); assertTrue(selenium.isElementPresent("id=:qx"), "Link \"Compose Mail\" present on page", false); selenium.click("id=:qx"); assertTrue(waitForElement("name=to", tryCount), "Wait for element \"To\"", true); assertTrue(selenium.isElementPresent("name=subject"), "On page present \"Subject\" element", false); assertTrue(waitForElement("name=body", tryCount), "Wait for email body input", true); if (selenium.isTextPresent("Plain Text")) { assertTrue(selenium.isTextPresent("Plain Text"), "Check on page present \"Rich formatting\"", true); log.info("Present PLAIN TEXT"); } else { assertTrue(selenium.isTextPresent("Rich formatting"), "Check on page present \"Rich formatting\"", true); log.info("Present RICH FORMAT"); } selenium.selectFrame("relative=top"); selenium.selectFrame("id=canvas_frame"); Assert.assertTrue(selenium.isElementPresent("xpath=id(':kg')/div/div/div/div[2]/b")); selenium.type("name=to", gmail_login.toLowerCase() + "@gmail.com"); selenium.type("name=subject", seleniumMailSubject); selenium.type("name=body", seleniumMailBody); selenium.click("xpath=/HTML/BODY/DIV[1]/DIV[2]/DIV/DIV[2]/DIV[1]/DIV[3]/DIV[1]/DIV/DIV/DIV[2]/DIV/DIV/DIV/DIV/DIV[2]/DIV/DIV[2]/DIV/DIV/DIV/DIV[1]/DIV[@id=':lo']/DIV/DIV/DIV[@id=':kj']/DIV[@id=':kg']/DIV/DIV/DIV/DIV[2]/B"); assertTrue(waitForElement("//div[2]/div/div/span/span[1]", tryCount), "Wait till the mail is sent", true); assertTrue(selenium.isTextPresent("Your message has been sent."), "On page present message \"Your message has been sent.\"", true); }
#4
Отправлено 19 октября 2009 - 08:58
selenium.click("xpath=/HTML/BODY/DIV[1]/DIV[2]/DIV/DIV[2]/DIV[1]/DIV[3]/DIV[1]/DIV/DIV/DIV[2]/DIV/DIV/DIV/DIV/DIV[2]/DIV/DIV[2]/DIV/DIV/DIV/DIV[1]/DIV[@id=':lo']/DIV/DIV/DIV[@id=':kj']/DIV[@id=':kg']/DIV/DIV/DIV/DIV[2]/B");
может не сработать. Попробуйте еще CSS-локаторы. У XPath есть проблема, что если вложенность элементов очень большая, то он плохо находит нужный элемент.
#5
Отправлено 19 октября 2009 - 09:13
если можете подсказать css локатор для гмейла то буду очень благодарен
если нужно могу дать пароль и логин на мило - оно и так тестовое ничего там нужного нету
#6
Отправлено 19 октября 2009 - 11:20
#7
Отправлено 19 октября 2009 - 12:35
или же clickAt("//b[text()='Отправить']");
#8
Отправлено 19 октября 2009 - 14:16
О спасибо большоеclickAt("//div/div/div/div[1]/div/div/div/div[2]/b"); у меня работало в фф 3,0
или же clickAt("//b[text()='Отправить']");
Заработал clickAt("//b[text()='Отправить']"); - правда окончательний вариант такой
selenium.clickAt("//b[text()='Send']", ""); кликет нужно два параметра - я так пробовал правда простим кликом - неработало, а кликет сработал:) спасибо
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных