Selenium, похоже, не распознает наложение

#selenium #webdriver #e2e-testing

#селен #webdriver #e2e-тестирование

Вопрос:

У меня возникли проблемы с получением selenium webdriver для идентификации и щелчка по любой части оверлея, которая отображается при переходе к www.oneplace.com . Предполагается, что наложение должно быть отменено при нажатии. Смотрите ниже мой код selenium

 IWebDriver wd = new ChromeDriver();
try {      
   wd.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(7));
   wd.Navigate().GoToUrl("https://www.google.co.uk/);
   wd.Navigate().GoToUrl("http://www.oneplace.com/");
   wd.FindElement(By.Id("takeoverOverlay")).Click();

   if (!wd.FindElement(By.TagName("html")).Text.Contains("DONATE")) {
       Console.Error.WriteLine("verifyTextPresent failed");
   }
 }
 finally { wd.Quit(); }
  

Ответ №1:

Когда вы автоматизируете сценарии, автоматизируйте то, что будет делать пользователь. Что бы сделал пользователь, чтобы закрыть всплывающее окно? Они будут нажимать на X в правом верхнем углу. Щелкните правой кнопкой мыши на этом элементе в вашем браузере и выберите Inspect (или любой другой вариант в вашем любимом браузере). Элемент, который является тем, что X является

 <img class="closeTakeover" ... src="http://cdn.salemweb.net/zcast/shared/close-btn.png?v=1">
  

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

 wd.FindElement(By.CssSelector("img.closeTakeover")).Click();
  

Пара дополнительных комментариев…

  1. Почему вы переходите в Google, а затем в oneplace? Вы должны иметь возможность удалить первую навигацию?

  2. Я бы посоветовал вам удалить неявные ожидания и использовать только явные ожидания.

  3. На самом деле вы не хотите выполнять поиск по всему тексту страницы (HTML) в поисках DONATE. Это может быть в названии какой-либо книги или статьи, и вы регистрируете проход, когда на самом деле это должен быть сбой. Найдите конкретный элемент, который, как вы ожидаете (или не ожидаете), будет содержать DONATE, и выполните поиск только по тексту этого элемента, например, приведенный ниже код проверяет, что DONATE не отображается в верхнем разделе навигации.

     if (!wd.FindElement(By.CssSelector("nav")).Text.Contains("DONATE"))
      

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

1. Привет, Джефф, очень ценю ваш ответ и совет. Ваше решение работает нормально. Для меня это только первые дни использования selenium. Сказав это, я думаю, что некоторые из этих наложений не имеют X в правом углу. Кроме того, пользователь может отклонить наложение самым быстрым и удобным способом. Мне как бы интересно, есть ли какое-либо решение первоначальной проблемы простого нажатия на часть прозрачности наложения, чтобы отменить наложение.

2. Когда вы указываете Selenium щелкнуть элемент, он щелкнет по центру этого элемента. Когда элемент имеет размер окна браузера, а центр обычно находится там, где находится всплывающее окно, вам нужно будет «помочь» Selenium щелкнуть там, где вы хотите. Вы можете сделать это с помощью Actions и MoveToElement со смещением и щелкнуть в любом месте экрана, но вам придется выполнить некоторые вычисления в зависимости от того, где вы хотите щелкнуть, чтобы не пытаться щелкнуть с экрана или браузера.

3. Джекпот. Большое спасибо за это, брат.