2016-02-19 2 views
0

Я работаю над автоматизацией продукта (Web CMS), где element.Click() показывает непоследовательное поведение. В основном мы используем,Непостоянное поведение Click() в Selenium

Селена + Nunit GUI (система тестирования блока) - Для запуска тестовых данных из локальных в конкретной среде

Селен + веб-приложение Asp.net - Multiple пользователя может запустить тестовые примеры в разных средах Здесь я имею в виду разные уровни (Dev, SIT, QA, Production).

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

первая попытка: - Я попробовал все элемента локатор в

IWebElement element = driver.FindElement(By.Id("element id goes here")) 
Working fine at my local, but not in server 

Результат - Failed

вторая попытка: -

driver.FindElement(By.XPath("Element XPath goes here")).SendKeys(Keys.Enter); 

работает отлично на сервере, а не в локальной Результат - Ошибка

третья попытка: -

IWebElement element = driver.findElement(By.id("something")); 
    IJavaScriptExecutor executor = (IJavaScriptExecutor)driver; 
         executor.ExecuteScript("arguments[0].click()", element); 

Не работает в обоих (локальный и сервер) Результат - Failed

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

четвёртая попытка: -

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60)); 
       return wait.Until(ExpectedConditions.ElementIsVisible(By.XPath("element xpath goes here"))); 


После WebDriver ждать выполнения действий по этому элементу (element.click()) работает нормально на местном, но не в сервере Результат - Failed

I искать решение, где Clickin g кнопка не должна быть непоследовательным поведением. В основном он должен работать нормально как в (локальный и серверный). Ваша помощь будет принята с благодарностью. Спасибо заранее
FYI - Я тестирую браузер Mozilla Firefox 38.5.2

+0

Вы никогда не говорили, в чем проблема. «Ошибка» не является хорошим описанием проблемы. Вместо этого скажите, что произошло. Любое исключение? Что происходит? –

+0

Я использую Selenium в C# локально на Win7 и удаленно на Win10 и MacOS с браузером Firefox –

+0

@ Sriram - На самом деле, при нажатии этой конкретной кнопки появилось предупреждающее сообщение о блокировке всплывающих окон Firefox и прекратило выполнение тестовых примеров ..FYI - Несмотря на то, что блокировка всплывающих окон отключена на уровне браузера – Aishu

ответ

0

Я использую Selenium на C# локально на Win7 и удаленно на Win10 и MacOS с браузером Firefox, а также заметил, что Firefox иногда требует специальной обработки для IWebElement.Click(). Так что я написал себе метод расширения, который работает хорошо для меня, независимо от того, что локатор был найден элемент:

public static void Click(this IWebElement element, TestTarget target) 
{ 
    if (target.IsFirefox) 
    { 
     var actions = new Actions(target.Driver); 
     actions.MoveToElement(element); 

     // special workaround for the FirefoxDriver 
     // otherwise sometimes Exception: "Cannot press more then one button or an already pressed button" 
     target.Driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.Zero); 
     // temporarily disable implicit wait 
     actions.Release().Build().Perform(); 
     target.Driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(MyDefaultTimeoutInSeconds)); 

     Thread.Sleep(500); 
     actions.MoveToElement(element); 
     actions.Click().Build().Perform(); 
    } 
    else 
    { 
     element.Click(); 
    } 
} 

Если вы хотите более стабильное поведение для ваших тестов, я бы рекомендовал использовать ChromeDriver. Это никогда не нужно любого специальной обработки вообще, и это также намного быстрее, чем FirefoxDriver.

+0

Получение исключение – Aishu

+0

Исключение - не удается отпустить кнопку, когда кнопка не нажата ... – Aishu

+0

Упс! Правильно. Вы должны поместить строку с 'actions.Release(). Build(). Выполнить();' в 'try' ...' catch {} '(игнорируя любое исключение) –

Смежные вопросы