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

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

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

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

1 лайк

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

1 лайк

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

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

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

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

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

1 лайк

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

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

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

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

Привет.
С 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; }

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

1 лайк

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

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

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

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

2 лайка

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

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

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

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

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

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

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

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

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

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

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