Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Как правильно открыть емейл с нужным заголовком

java
webdriver
selenium
Теги: #<Tag:0x00007fedb8490ba8> #<Tag:0x00007fedb8490a40> #<Tag:0x00007fedb8490900>

(Alena88) #1

Добрый день, мне нужно открыть email, заголовок которого содержит String ‘Test’
@FindBy(xpath = “//*[contains(text(), ‘Test’)]”)
WebElement email;

public void openEmail() {
email.click();
}

Получаю ошибку: org.openqa.selenium.ElementNotVisibleException: element not visible
Подскажите, как правильно кликать по нужному емейлу.


(Bolatbek) #2

О чем вообще речь :slight_smile:


(Alena88) #3

Извините, но я не знаю как можно описать более доходчиво. Есть кусок кода, который не работает, есть ошибка, есть задача. Что вам не понятно?


(Bolatbek) #4

Навскидку, посмотрите, может на странице несколько элементов, подпадающих под ваш xpath?


(Alena88) #5

Я вообще не уверена что он правильный. Поэтому был вопрос: как правильно найти и кликнуть нужный емейл со стрингой Тест.


(Bolatbek) #6

Тут нет телепатов. Либо даете ссылку на почтовый сервис, который тестируете).
Либо даете кусок DOM, где нужно вам найти нужный элемент.

А ошибка говорит о том. что элемент найден, но он невидимый (он может визуально быть видимым, на самом деле). Тут варианты:

  • элементов несколько с текстом “Test”, и первый найденный элемент невидимый;
  • элемент один, но скрыт другим элементом.

В любом случае, если нужна помощь - дайте больше инфы.


(Alena88) #7
...
<div class="y6">
<span id=":3i" class="bog">Test</span>

Нужно кликнуть сюда (нужно кликнуть по емейлу с заголовком Test)


(Bolatbek) #8

Класс “bog” - о, господи ).


(Alena88) #9

Это гмейл, детка!
И таких там много, поэтому мне нужно искать именно по тексту Тест!


(Vladimir Sokolov) #10

Алёна, а вам письмо нужно именно в браузере посмотреть? Или получить его содержимое?


(Alena88) #11

Мне нужно его открыть, кликнуть по нему.


(Bolatbek) #12

“Это гмейл, детка!” - что это было?


(Alena88) #13

Это ответ на комментарий о классе. Такой класс есть в gmail, таких там много. Опять не понял…:unamused:


(Bolatbek) #14

Алена, Вы меня простите, но писать “это gmail, детка” незнакомому человеку как минимум не вежливо.
Во-вторых, я выше спросил - какой почтовый сервис тестируете, и вопросы у многих (коих тут всего 2 человека) сразу бы отпали.
Удачи в тестировании.


(Alena88) #15

Вообще-то выражение такое есть. Нечем помочь, проходите дальше.


(Макаров Фин) #16

org.openqa.selenium.ElementNotVisibleException: element not visible - селениум умеет работать только с теми элементами, которые находятся в зоне видимости страницы.
Вам нужно скриптом прокручивать страницу до места где находится элемент, и поле этого щелкать по нему
http://internetka.in.ua/selenium-webdriver-scrolling/


(Alena88) #17

Правильное решение:
@FindBy(xpath = “//*[text()=‘Test’]”)


#18

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

  def reset_link_yahho(email, password)
    Net::POP3.enable_ssl(OpenSSL::SSL::VERIFY_NONE)
    @pop = Net::POP3.start('pop.mail.yahoo.com', 995, email, password)
    if @pop.mails.empty?
      puts 'No mail.'
    else
      result = String.new
      @pop.mails[0].pop {|chunk| result << chunk}
      p @link_to_reset = find_reset_link(result)
    end
  end

А вот так я нахожу кусок который содержит ссылку на смену пароля.

    def find_reset_link(body)
    href = body[0..body.index('Reset Password')]

    link = href[href.rindex('href') + 4..href.length]
    link = link[link.index('"') + 1..link.length]
    link = link[0..link.index('"') - 1]

    link.sub!(Host, '')
    link
  end

и очищаем ящик

  def clear_email_yahho(email, password)
    Net::POP3.enable_ssl(OpenSSL::SSL::VERIFY_NONE)
    Net::POP3.start('pop.mail.yahoo.com', 995,  email, password) do |pop|
      if pop.mails.empty?
        puts 'No mail.'
      else
        count = 1
        pop.each_mail do |m|
          count += 1
          m.delete
        end
      end
    end
  end

И не забудьте включить у вашего емэйл аккаунта опцию, в настройках безопасности, чтоб оно могло работать с внешними приложениями.
Чуть не забыл, когда будете вызывать емэйл - сделайте это в цикле, потому что письмо может сразу не прийти.

    @get = GetEmail.new

    @link_to_reset = NIL

    while @link_to_reset.nil?

      @link_to_reset = @get.reset_link_yahho(@username, @password)

    end