Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Ожидания в IE 8,9


(Roman) #1

Добрый день.

Язык программирования C#.

 //Переход по ссылке

public void PressOnExploreLink()
        {
            driver.FindElement(By.CssSelector(linkExplore)).SendKeys("\n");
         }

//Получение тайтла открываемой страницы

 public static void AssertTitlePage(string title)
        {
            Assert.That(title ==driver.Title);
        }

Возникла проблема в IE 8,9 не срабатывают implicit and explicit ожидания.

 driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

При переходе по ссылке тест падает т.к IE не может подгрузить другую страницу.

Подскажите пожалуйста, как можно решить данную проблему и если можно пример кода.


(qaleader) #2

У вас в комментариях написано переход по ссылке, а на деле вы пытаетесь ввести текст в ссылку, а если еще точнее перейти на новую строку, возможно вам стоит использовать: driver.FindElement(By.CssSelector(linkExplore)).Click();


(Roman) #3

driver.FindElement(By.CssSelector(linkExplore)).Click();--Click() не срабатывал. пришлось искать другой способ.Как вариант  driver.FindElement(By.CssSelector(linkExplore)).SendKeys(Keys.Enter); - вот так работает нажатие на ссылку..

Спасибо за возможный вариант.


(Дмитрий Жарий) #4

 

Ситуация с тем, почему клик не работает – как-то очень не ясна.

Убедитесь в том, что используется последний драйвер для IE версии 2.26.

Обойти проблему можно посредством WebDriverWait.

Например, на той странице, заголовок которой вы ждете, вы можете ожидать появление какого-нибудь уникального элемента:

wait.Until(ExpectedConditions.ElementIsVisible(By.CssSelector(expectedElementOnThePage)));

 

И проверить заголовок уже после его появления.

Также можно ждать нужный заголовок.

wait.Until(ExpectedConditions.TitleContains("Общий"));

 

В отличии от Assert'а, этот способ выбросит не очень привлекательный TimeOut Exception, но вы можете обвернуть этот метод в свой и доделать красивый вывод ошибки, отловив исключение при помощи try\catch. 

 

 

using System;
using OpenQA.Selenium;
using OpenQA.Selenium.IE;
using OpenQA.Selenium.Support.UI;

namespace ConsoleApplication1
{
    class Program
    {
        static IWebDriver driver = new InternetExplorerDriver();

        static void PressEnterOnLink(string cssLocator) 
        {
            var element = driver.FindElement(By.CssSelector(cssLocator));
            element.SendKeys(Keys.Enter);
        }

        static void Main(string[] args)
        {
            driver.Navigate().GoToUrl(@"http://automated-testing.info");
            
            PressEnterOnLink("a[href$='/forum']");

            string expectedElementOnThePage = @"a[href$='/forum/obshchiy-forum-avtomatizacii']";

            WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); // 10 sec
            wait.Until(ExpectedConditions.ElementIsVisible(By.CssSelector(expectedElementOnThePage)));

            PressEnterOnLink(expectedElementOnThePage);

            wait.Until(ExpectedConditions.TitleContains("Общий"));
            
            Console.WriteLine(driver.Title);
            driver.Quit();
        }
    }
}

(Roman) #5

спасибо помогло WebDriverWait.