Делаю автотест на Selenium + c#, авторизацию написал, нажатие на кнопку “Написать”, затем открывается фрейм нового письма.
Проблема - не могу найти XPATH полей нового письма и кнопки “Отправить”.
Можно попробовать так:
//*[@placeholder=‘Тема’]
А можно так:
Не мучай себя, сделай через IMAP протокол. Примеров есть много.
Попробуйте посмотреть, не отдельный ли iframe это новое письмо. Если да, то просто переключите внимание драйвера на него.
Не знаю где посмотреть это фрейм или нет, но делаю
driver.SwitchTo().Frame(1);
и дальше все равно не получается получить доступ к полям письма
Валится вот тут на xpath
Через плейсхолдер не работает
Попробуйте немного подождать, чтобы подгрузился элемент и потом switchTo().defaultContent() (или activeElement() ) походу это окошко все же находится в главном документе, но надо явно на него перейти.
и да… By.Xpath(".//*[@id=’:or’]") при чем тут класнейм?
Зачем вы автоматизируете работу с Gmail?
Вы работаете в Google?
Либо тестовое задание, либо учится… либо молодой спамер )))))
Получил тестовое задание)
Нашел следующие селекторы:
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; }
Все работает без переключения между фреймами
Я бы посоветовал искать по тексту и title-у, стандартные селекторы там обфусцированы и не стабильны
Способов много, например, так:
//span[@aria-label='To - Select Contacts']/../../..//textarea
У меня англоязычный интерфейс.
большое спасибо, разобрался
А как звучит задание? Если просто “отправить письмо”, то может этого всего гемора и не надо, достаточно будет IMAP.
да, с IMAP тут не обойтись видимо )
System.out.println(driver.findElement(By.tagName(“код iframe”)).getAttribute(“innerHTML”));
Хоть выше уже и предоставлено решение, но можно воспользоваться упрощенной HTML версией. Там с селекторами всё проще.
подскажите куда смотреть
Добрый день,
Вам нужно перейти в фрейм письма, селениум ищет елементы только в пределах фрейма.
Можно перейти в нужный фрейм по индексу если посчитать какой он, или методом перебора,
или же получить все фреймы которые есть и уже там вычислить какой именно.
если сможете написать xpath тогда так
driver.SwitchTo().Frame(driver.FindElement(By…
Для тестового задания делайте через интерфейс но по хорошему нужно использовать API.
Быстро , стабильно и надежно. Независимо от UI.
У них очень динамические странички, нужно для стабильной работы серйозно заморочиться, ну и еще постоянно меняют структуру.