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

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

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

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

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

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

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

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

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

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

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

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

...
<div class="y6">
<span id=":3i" class="bog">Test</span>

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

1 лайк

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

1 лайк

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

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

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

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

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

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

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

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

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

Алена, сделайте это через протокол 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