Веб-драйвер для открытия почты в Gmail

#selenium #gmail #automated-tests #webdriver

#селен #gmail #автоматизированные тесты #webdriver

Вопрос:

Я начал использовать Webdriver для автоматизации нашего тестирования, которое на 100% выполняется вручную.

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

Я знаю тему электронного письма и т.д., Но я не могу использовать его для доступа к элементу. Gmail получает все свои данные в формате JSON, а затем создает всю страницу с помощью функций js. Таким образом, webdriver не может получить доступ ни к одному из элементов, созданных с использованием полученных данных JSOn.

Любая помощь приветствуется.

Спасибо, Крис.

Комментарии:

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

Ответ №1:

Я бы посоветовал НЕ использовать пользовательский интерфейс для проверки Gmail. Пользовательский интерфейс Gmail чрезвычайно сложен, и это ловушка. Для меня автоматизация с помощью selenium вообще не является решением.

Рассмотрите возможность использования JavaMail API и HttpURLConnection. Это то, что я делаю в аналогичном сценарии тестирования.

Во время запуска теста webdriver, после выполнения определенного действия, если вы ожидаете электронное письмо, затем с помощью JavaMail API проводите опрос (по определенному таймауту, если он не немедленный) для электронной почты в фоновом режиме с определенной «темой» или «отправителем» и т.д. Как только электронное письмо найдено, перейдите по ссылке из содержимого электронной почты, а затем имитируйте щелчок, используя HttpURLConnection

Комментарии:

1. 1 Если вы не тестируете интерфейс Gmail, а вместо этого просто тестируете почтовый процесс (получение или отправку), то другое решение будет гораздо более предпочтительным. Google постоянно изменяет реализацию пользовательского интерфейса, чтобы предотвратить создание сценариев, поэтому ваши автоматические тесты будут прерываться каждый раз, когда это произойдет. Используйте сервис, над которым у вас есть 100% контроль.

2. Если бы я мог голосовать за это снова и снова, я бы это сделал. Пожалуйста, все, ради всего святого, НЕ автоматизируйте пользовательский интерфейс GMail с помощью Selenium или WebDriver.

Ответ №2:

Если вы можете выполнить поиск по конкретному электронному письму, вы можете использовать следующий код, чтобы найти искомое электронное письмо:

 //div [@class='y6']/span[contains(.,'<your original search text>')]
  

имейте в виду, что Google отключит тему, что приведет к чему-то вроде «тема …», если тема слишком длинная. Мы используем уникальный номер для идентификации сообщений в нашей автоматизированной тестовой среде.

Ответ №3:

Я не думаю, что я правильно понял ваш вопрос, но я полагаю, у вас возникли проблемы с поиском локатора для открытия почты после того, как вы ввели текст в поле поиска gmail.

//div[5]/div/div/table/tbody/tr[n]" //n is the row no. of mailbox, for first result use 1 and like

используйте это как идентификатор для элемента, прежде чем нажимать на него.

Надеюсь, это поможет.

Комментарии:

1. Я попробовал приведенный ниже код, и у меня он не работает. Я пытаюсь открыть электронное письмо в папке «Входящие» gmail. Драйвер WebDriver = новый FirefoxDriver(); loginToGmail(драйвер); Веб-элемент mailLink = driver.findElement(По.xpath(«//div[5]/div/div/table/tbody/tr[1]»)); System.out.println(«mailLink.getText(): » mailLink.getText());

2. эта ссылка предназначена для открытия почты. используйте mailLink.Click(). Кроме того, вполне возможно, что в вашей стране gmail отображается иначе, чем в моей, в этом случае xpaths будут другими. Сначала попробуйте это с помощью selenium IDE, если это сработает, затем вставьте это в свой код.

3. Он не может найти элемент, поэтому нет смысла вызывать метод click. Я попытался использовать Selenium IDE, я записал свои действия и нажал на почту. Но IDE ничего не выдала для целевого узла. Я заметил, что идентификатор таблицы равен: p3, и попытался получить его и обработать с помощью: //table[@id=’:p3′] . Тоже не сработало.

4. Не все элементы доступны для просмотра. Используйте clickAt, и целевой параметр должен содержать xpath из tr внутри tbody таблицы. В данный момент вы переходите к таблице till, пожалуйста, загляните в дочерний элемент этого тега, он будет содержать tr- которые представляют собой строки почты во входящих.

5. Я сказал, что не могу найти элемент таблицы. Таким образом, о вызове любого метода на нем или извлечении его дочерних элементов не может быть и речи.

Ответ №4:

В моем случае я нашел решение, используя класс Action веб-драйвера

Предварительное условие: Ваш драйвер должен переместиться в определенный фрейм, чтобы найти элемент

 wd.switchTo().frame("canvas_frame");
  

Шаг 1) Найдите конкретное электронное письмо, созданное с использованием приведенного ниже кода

 String searchvalue="html/body/div[1]/div[2]/div/div[1]/div[3]/div/div[1]/div[2]/div[2]/div/form/fieldset[2]/div/div/div[2]/input";
wd.findElement(By.xpath(searchvalue)).sendKeys(sendkeys);
String clickSearch=".//*[@id='gbqfb']";
wd.findElement(By.xpath(clickSearch)).click();
  

Шаг 2) Теперь используйте класс Actions для навигации.

 Actions action= new Actions(wd);
    action.click(firstrecord).build().perform();
  

Надеюсь, это поможет!

Ответ №5:

Приведенный выше ответ верен для идентификации почты в Gmail, если мы заменим тему. Я попытался с помощью Selenium IDE найти объект с целевым значением как

 xpath=//div [@class='y6']/span[contains(.,'<your original search text>')]
  

Объект был найден, но щелчок не открывает почту.

Итак, после некоторого расследования я обнаружил, что метод mouseDown работает с указанным выше xpath для открытия почты. Таким образом, команда будет

 selenium.mouseDown("xpath=//div [@class='y6']/span[contains(.,'<your original search text>')]"); 
  

или

 <td>mouseDown</td>
<td>xpath=//div[@class='y6']/span[contains(.,'£10 OFF when you spend £30 or more online')]</td>
<td></td>
  

в среде IDE.

Надеюсь, это поможет.

Ответ №6:

Текущий локатор для тела gmail:

 driver.findElement(By.className("LW-avf")).click();
driver.findElement(By.className("LW-avf")).clear();
driver.findElement(By.className("LW-avf")).sendKeys("your body message");
  

Ответ №7:

Приведенная ниже команда selenese выполнит:

 clickAt | //table/tbody/tr/td[5]/div[@class='yW'] |
  

Нажмите на FROM поле первое / последнее / самое верхнее письмо, чтобы перейти на страницу сведений о почте. // примечание: tr для первого письма, tr[2] для второго и так далее.

Ответ №8:

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

     for i in xrange(int(num)):
    time.sleep(3)
    m=random.randint(1,10)
    print("Mail Number " str(m) " is selected")
    browser.find_element_by_xpath("//div[@role='tabpanel'][1]//table//tr" str([m])).click()
    time.sleep(3)
    browser.find_element_by_xpath('//*[@id=":5"]/div[2]/div[1]/div/div[1]/div/div/div').click()
  

Ответ №9:

Вы также можете использовать это, если хотите открыть определенное письмо в gmail:

 driver.findElement(By.xpath("//tr[i[td[4[div[contains(@class,'yW')]]]")).click();
  

Здесь i указан номер почты, который вы хотите