Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Не могу найти селекторы или XPATH в Gmail

selenium
webdriver
Теги: #<Tag:0x00007f7b604e1c58> #<Tag:0x00007f7b604e1af0>

(Вова Черепок) #1

Делаю автотест на Selenium + c#, авторизацию написал, нажатие на кнопку “Написать”, затем открывается фрейм нового письма.
Проблема - не могу найти XPATH полей нового письма и кнопки “Отправить”.


(Ugin Berets) #2

Можно попробовать так:
//*[@placeholder=‘Тема’]
А можно так:


(zaleg) #3

Не мучай себя, сделай через IMAP протокол. Примеров есть много.


(Oleksii Komar) #4

Попробуйте посмотреть, не отдельный ли iframe это новое письмо. Если да, то просто переключите внимание драйвера на него.


(Вова Черепок) #5

Не знаю где посмотреть это фрейм или нет, но делаю
driver.SwitchTo().Frame(1);
и дальше все равно не получается получить доступ к полям письма
Валится вот тут на xpath


(Вова Черепок) #6

Через плейсхолдер не работает


(Yaroslav Pernerovskyy) #7

Попробуйте немного подождать, чтобы подгрузился элемент и потом switchTo().defaultContent() (или activeElement() ) походу это окошко все же находится в главном документе, но надо явно на него перейти.

и да… By.Xpath(".//*[@id=’:or’]") при чем тут класнейм?


(Сергей Блохин) #8

Зачем вы автоматизируете работу с Gmail?
Вы работаете в Google?


(Yaroslav Pernerovskyy) #9

Либо тестовое задание, либо учится… либо молодой спамер )))))


(Вова Черепок) #10

Получил тестовое задание)
Нашел следующие селекторы:

emailField = driver.FindElement(By.ClassName(“vO”));
subjectField = driver.FindElement(By.Classname(“aoT”));

bodyField пока не получается найти, селениум не находит его на странице, ни по XPath, ни по сss


(Yura Demchenko) #11

Привет.
С C# были проблемы - вейтер непонятно для меня работал и пришлось таки использовать тредслипы – бедпрактис(( :

System.Threading.Thread.Sleep(1000);
            Adress.Click();
System.Threading.Thread.Sleep(1000);
            Adress.SendKeys("email@gmail.com");
System.Threading.Thread.Sleep(1000);
            Subject.SendKeys("Hello");

Далее локаторы для адреса, темы и тела письма:

 [FindsBy(How = How.XPath, Using = "//textarea[@class='vO']")]
        public IWebElement Adress { get; set; }

[FindsBy(How = How.XPath, Using = ".//*[@name=\"subjectbox\"]")]
        public IWebElement Subject { get; set; }

[FindsBy(How = How.XPath, Using = "//*[@class=\"Am Al editable LW-avf\"]")]
        public IWebElement BodyMail { get; set; }

Все работает без переключения между фреймами


(Алексей) #12

Я бы посоветовал искать по тексту и title-у, стандартные селекторы там обфусцированы и не стабильны


(Bolatbek) #13

Способов много, например, так:

//span[@aria-label='To - Select Contacts']/../../..//textarea

У меня англоязычный интерфейс.


(Вова Черепок) #14

большое спасибо, разобрался


(Виталий Коряков) #15

А как звучит задание? Если просто “отправить письмо”, то может этого всего гемора и не надо, достаточно будет IMAP.


(Виталий Коряков) #17

да, с IMAP тут не обойтись видимо )


(Павел Майоров) #18

System.out.println(driver.findElement(By.tagName(“код iframe”)).getAttribute(“innerHTML”));


#19

Хоть выше уже и предоставлено решение, но можно воспользоваться упрощенной HTML версией. Там с селекторами всё проще.


(Вова Черепок) #20

подскажите куда смотреть


(Svyatoslav Hnat) #21

Добрый день,
Вам нужно перейти в фрейм письма, селениум ищет елементы только в пределах фрейма.
Можно перейти в нужный фрейм по индексу если посчитать какой он, или методом перебора,
или же получить все фреймы которые есть и уже там вычислить какой именно.

если сможете написать xpath тогда так

driver.SwitchTo().Frame(driver.FindElement(By…

Для тестового задания делайте через интерфейс но по хорошему нужно использовать API.
Быстро , стабильно и надежно. Независимо от UI.

У них очень динамические странички, нужно для стабильной работы серйозно заморочиться, ну и еще постоянно меняют структуру.