Перейти к содержимому

Публикации fenixx

29 публикаций создано fenixx (учитываются публикации только с 28 апреля 2023)



#129737 WebDriver Ошибочный клик по элементу

Отправлено автор: fenixx 17 апреля 2014 - 13:10 в Selenium - Functional Testing

 

У селениума "курсор мыши есть", но он "невидимый".
И он не двигается, перемещаясь с одного элемента страницы на другой.

Ой-ли?

html:

<html>
<head></head>
<body>
<div style='height:100px;width:100px;border-style:solid;border-width:1px' onmouseover='this.style.color="red"'>hello</div>
<input type='button' value='PushMe'/>
</body>
</html>
code:

		WebDriver driver = new FirefoxDriver();
		driver.get("file://///alex/temp/test1.html");
		System.out.println(driver.findElement(By.xpath("//div")).getAttribute("style"));
		driver.findElement(By.xpath("//input")).click();
		System.out.println(driver.findElement(By.xpath("//div")).getAttribute("style"));
		driver.quit();
output:

height: 100px; width: 100px; border-style: solid; border-width: 1px;
height: 100px; width: 100px; border-style: solid; border-width: 1px; color: red;

 

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




#129733 WebDriver Ошибочный клик по элементу

Отправлено автор: fenixx 17 апреля 2014 - 12:37 в Selenium - Functional Testing

Раз тут всплыло слово "селект", вопрос - вам надо выбрать какой-то элемент в селекте?

 

Речь идет не про "селект", а про "селектор XPath".

Элемент по которому производится клик, это ссылка.




#129726 WebDriver Ошибочный клик по элементу

Отправлено автор: fenixx 17 апреля 2014 - 11:58 в Selenium - Functional Testing

Попробуйте в режиме дебага поставить брейкпоинт на этой строчке и посмотреть свойства объекта D.FindElementByXPath(viewSelectBtn). Тот ли это элемент, который Вы ожидаете?

 

Проверял, находит правильный элемент.

Еще предложения какие есть?




#129719 WebDriver Ошибочный клик по элементу

Отправлено автор: fenixx 17 апреля 2014 - 11:13 в Selenium - Functional Testing

У селениума "курсор мыши есть", но он "невидимый".

И он не двигается, перемещаясь с одного элемента страницы на другой.

Представьте, что экран - двумерная картинка, а курсор селениума - это Ваш палец. Для того чтобы кликнуть на элементе, Вы просто кликаете, а не ведёте пальцем по экрану до нужного элемента.

"Движение" можно заметить только при DRAG&DROP.

 

Так что, если селениум кликает на элементе выпадающего меню, значит этот элемент удовлетворяет условиям поиска ХРАТН.

 

P.S. А что за язык-то?

 

Спасибо что объяснили как работает клик в Seleniume, очень подробно и понятно.

Язык - C#

viewSelectBtn - переменная типа string в ней селектор XPath

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

"Так что, если селениум кликает на элементе выпадающего меню, значит этот элемент удовлетворяет условиям поиска ХРАТН." - по селектору XPATH на странице находится единственный элемент. Кликает в областе найденного элемента, но не по найденному элементу. И непонятно почему выпадает меню во время клика.

Подскажите каким образом с этим разобраться?

Как можно перед кликом, получить координаты клика?




#129744 WebDriver Ошибочный клик по элементу

Отправлено автор: fenixx 17 апреля 2014 - 13:59 в Selenium - Functional Testing

Используйте actions.moveToElement ... 

Сначала подведите к элементу что ниже, а затем подведите и кликните на нужном, может прокатит...

 

Спасибо за совет буду пробовать




#129745 WebDriver Ошибочный клик по элементу

Отправлено автор: fenixx 17 апреля 2014 - 14:06 в Selenium - Functional Testing

Вам уже ответили.

Используйте actions.moveToElement ... 
Сначала подведите к элементу что ниже, а затем подведите и кликните на нужном, может прокатит...

А так как мы не видим лэйаут вашей страницы, общий совет такой - используйте Actions и лавируйте мышкой, что бы избежать попадания на drop_down_menu.
А еще лучше выпишите баг на юзабилити - подобные меню, без дэлея на экспанд жутко бесят не только WD, но и пользователей.

 

 

Спасибо.




#129785 WebDriver Ошибочный клик по элементу

Отправлено автор: fenixx 18 апреля 2014 - 09:32 в Selenium - Functional Testing

В ФФ нативные отключаются так:

firefoxProfile.setEnableNativeEvents(false);
// или
firefoxCapabilities.setCapability("nativeEvents", false);

В Хроме их нет. А в ИЕ они есть, и включены по умолчанию.

Поэтому, я немного не понимаю, почему оно у вас так по разному работает везде, т.к. вы сами написали что в ИЕ всё работает корректно.

 

Спасибо.
Самому интересно почему по разному работает.

У меня в цикле прогоняется одно и тоже действие по страницам списка.

И что самое интересное, наведение на меню(onmouseover) отрабатывает только при первой итерации при последующих работает все как надо.




#129772 WebDriver Ошибочный клик по элементу

Отправлено автор: fenixx 18 апреля 2014 - 06:24 в Selenium - Functional Testing

Как вариант - выключите нативные ивенты nativeEvents

 

Спасибо за ссылку.

К сожалению английский плохо знаю, но на сколько понял событие это можно только отключить у браузера IE.

Но мне нужно отключить событие onmouseover для всех браузеров, в частности Chrom, FireFox, Safari, IE.

Кто может подсказать как это можно сделать через WebDriver или каким другим способом.




#129770 WebDriver Ошибочный клик по элементу

Отправлено автор: fenixx 18 апреля 2014 - 05:49 в Selenium - Functional Testing

 

 

У селениума "курсор мыши есть", но он "невидимый".
И он не двигается, перемещаясь с одного элемента страницы на другой.

Ой-ли?

html:
<html>
<head></head>
<body>
<div style='height:100px;width:100px;border-style:solid;border-width:1px' onmouseover='this.style.color="red"'>hello</div>
<input type='button' value='PushMe'/>
</body>
</html>
code:
		WebDriver driver = new FirefoxDriver();
		driver.get("file://///alex/temp/test1.html");
		System.out.println(driver.findElement(By.xpath("//div")).getAttribute("style"));
		driver.findElement(By.xpath("//input")).click();
		System.out.println(driver.findElement(By.xpath("//div")).getAttribute("style"));
		driver.quit();
output:
height: 100px; width: 100px; border-style: solid; border-width: 1px;
height: 100px; width: 100px; border-style: solid; border-width: 1px; color: red;

В момент клика "мышка" "появляется" на элементе - всё правильно.

Попробуйте другой тест:

1) квадрат, в левом верхнем углу кнопка, в центре большая кнопка размером почти с квадрат и в правом нижнем углу кнопка.

2) свойства у кнопок следующие:

- левая верхняя - просто для клика

- центральная большая с жаваскриптом, изменяющим цвет при действии onmouseover

- правая нижняя - просто для клика

3) выполните вебдрайвером клик по левой верхней кнопке потом клик по правой нижней кнопке.

 

Если вебдрайвер ведёт курсор мышки, центральная большая кнопка изменит цвет.

Но она не изменит его. Попробуйте.

 

 

Проверил, получается что vmaximv прав

Проверка:

<head></head>
<body>
<div style='height:100px;width:100px;border-style:solid;border-width:1px' onmouseover='this.style.color="red"'>hello
<input id="b2" type='button' value='PushMe'/>
</div>
<input id="b1" type='button' value='B1111111111111111111111'/>
</body>
</html>
            D.Navigate().GoToUrl(@"file:///D:/1.html");
            var b1 = D.FindElementById("b1");
            D.FindElementById("b1").Click();// тут ставил брекпоинт. После клика по input id="b1" у div появлялась красная рамка.
            var b2 = D.FindElementById("b2");
            D.FindElementById("b2").Click();

Подскажите можно ли отключить при работе с кликами срабатывания события "onmouseover", в моем случае это событие вообще ненужно в некоторых тестах




#129713 WebDriver Ошибочный клик по элементу

Отправлено автор: fenixx 17 апреля 2014 - 10:47 в Selenium - Functional Testing

Язык C#, Selenium, WebDriver

Подскажите, кто сталкивался с проблемой ошибочного клика по элементу. Замечено в FireFox и Chrom, в IE как не странно работает правильно ))
Если да то как решили это?

D.FindElementByXPath(viewSelectBtn).Click();

Клик происходит не по найденному элементу, а по элементу из выпадающего меню.
Такое ощущение, что курсор мыши проходит по всплывающему меню, в этот момент происходит перекрытие найденного элемента элементом из всплывающего меню и клик происходим на элементе меню.

Как быть?
Можно ли задать чтобы курсор мыши передвигался снизу?
Курсора мыши не видно, вообще каким образом реализованы в Selenium клики по элементу, подскажите кто знает?

 

P.s. Но что удивительно, если с начало кликнуть по другому элементу на странице, то следом за этим клик по 

D.FindElementByXPath(viewSelectBtn).Click();

проходит успешно.




#129725 WebDriver Ошибочный клик по элементу

Отправлено автор: fenixx 17 апреля 2014 - 11:57 в Selenium - Functional Testing

Как вы проверяете на уникальность селектор?

 

XPath проверяю в FireFox через FirePath




#128754 Selenium не находит локаторы

Отправлено автор: fenixx 28 марта 2014 - 07:58 в Selenium - Functional Testing

 

Элемент который ищу. Так он отображается в коде браузера IE v.11

Для начала прочитайте это, и сделайте даунгрейд ИЕ.

This driver has been tested with IE 6, 7, 8, 9, and 10 on appropriate combinations of XP, Vista and Windows 7.

 

Хоть и не тестировалось под IE v.11 но этот код отрабатывает правильно:

 var NotMultiSel = DriverIE.FindElementsByXPath(@"//select[not(@multiple)]/..");

 Count = 1; На странице находится как раз один такой select.

 

Не понятно почему этот не отрабатывает:

 var MultiSel = DriverIE.FindElementsByXPath(@"//select[@multiple]/..");

 

Откат IE до v.10 не помог

 

Удалось обойти проблему так:

var MultiSel = DriverIE.FindElements(By.XPath(@"//select[not(@multiple)!='false']/.."));

 

 




#128750 Selenium не находит локаторы

Отправлено автор: fenixx 28 марта 2014 - 07:26 в Selenium - Functional Testing

Как вы проверяете свои запросы?

FirePath находит элементы?

Вы пытаетесь найти сами селекты, а не их родители...

Через FirePath.

FirePath находит без проблем.

Родители пытаюсь найти.




#128748 Selenium не находит локаторы

Отправлено автор: fenixx 28 марта 2014 - 06:56 в Selenium - Functional Testing

Метод FindElementsByXPath() не находит по селектору.

Использую библиотеки Seleniuma WebDriver.dll и WebDriver.Suppor.

Пробовал разные версии:

 3.41

 3.40

 3.34

 

Куски кода C#

 RemoteWebDriver DriverIE;

 DriverIE = new InternetExplorerDriver();

 var MultiSel = DriverIE.FindElementsByXPath(@"//select[@multiple]/.."); // Находим всех родителей элемента select с атрибутом multiple

 Count = 0 - делаю вывод что не находит ни одного элемента. Или я ошибаюсь?

 Но на странице точно есть такой элемент.

 

HTML

Элемент который ищу. Так он отображается в коде браузера IE v.11

<select name="Speakers" class="chzn-select span8 span8 chzn-done loaded" id="Speakers" style="display: none;" multiple="" data-placeholder="Докладчики"></select>

 

Подскажите в чем дело и как это обойти можно?

Если нужна еще информация спрашивайте.




#130777 Нестабильное прохождение тестов.

Отправлено автор: fenixx 27 мая 2014 - 06:48 в Selenium - Functional Testing

Столкнулся с проблемой в ожидании завершения всех Ajax в FireFoxe вместо при проверке jQuery.active всегда выдает ждал и минуту и больше, подскажите как можно определить что за Ajax отрабатывает?

Визуально все Ajax-ы отработали.

public void WaitForAjax(IWebDriver Driver)// Метод ожидает окончания Ajax запроса на странице
        {
            int i = 0;
            while (TimeOutLoadAjax > (i = i + stepTime))
            {
                var ajaxIsComplete = (bool)(Driver as IJavaScriptExecutor).ExecuteScript("return jQuery.active == 0");
                if (ajaxIsComplete)
                {
                    Logs(" Ajax завершился");
                    break;
                }
                else if (TimeOutLoadAjax <= i)
                {
                    WebDriverScreenshot(Driver, DateTime.Now.ToString("\n dd-MMMM-yyyy HH-mm-ss") + "\n Ajax лимит времени (" + TimeOutLoadAjax / 1000 + " сек.) ожидания Ajax закончился");
                    break;
                }
                Thread.Sleep(stepTime);
            }
        }



#130780 Нестабильное прохождение тестов.

Отправлено автор: fenixx 27 мая 2014 - 07:12 в Selenium - Functional Testing

У меня легкий когнитивный диссонанс: jQuery.active==true => ajaxIsComplete - это как?

Url: jquery.com
Browser: FF24.0



>>> jQuery.active
0
>>> jQuery.active==true
false
>>> jQuery.active==0
true
>>> 0==true
false
>>> 1==true
true
>>> 2==true
false

 

Извините, ошибся, и поэтому выше сообщение исправил.




#130796 Нестабильное прохождение тестов.

Отправлено автор: fenixx 27 мая 2014 - 11:27 в Selenium - Functional Testing

Столкнулся с проблемой в ожидании завершения всех Ajax в FireFoxe.

При проверке значения jQuery.active после завершения визуальных Ajax-сов всегда выдает ждал и минуту и больше.

Не могу понять в чем ошибка, то ли в Seleniume то ли в отработке самого Ajax-са. Руками ошибку воспроизвести не могу. 

Подскажите как проверить в чем ошибка?

public void WaitForAjax(IWebDriver Driver)// Метод ожидает окончания Ajax запроса на странице
        {
            int i = 0;
            while (TimeOutLoadAjax > (i = i + stepTime))
            {
                var ajaxIsComplete = (bool)(Driver as IJavaScriptExecutor).ExecuteScript("return jQuery.active == 0");
                if (ajaxIsComplete)
                {
                    Logs(" Ajax завершился");
                    break;
                }
                else if (TimeOutLoadAjax <= i)
                {
                    WebDriverScreenshot(Driver, DateTime.Now.ToString("\n dd-MMMM-yyyy HH-mm-ss") + "\n Ajax лимит времени (" + TimeOutLoadAjax / 1000 + " сек.) ожидания Ajax закончился");
                    break;
                }
                Thread.Sleep(stepTime);
            }
        }



#129319 Нестабильное прохождение тестов.

Отправлено автор: fenixx 09 апреля 2014 - 11:55 в Selenium - Functional Testing

Хорошо, тогда конкретный вопрос. Какими методами правильно и эфективно дождаться полной загрузки страницы после нажатия на кнопку или линку, кроме как вручную подбирать время задержки??

 

Тут как ожидать элемент лучше:

http://software-test...resent/?p=61704

 

Тут почему Wait класс не стоит использовать для ожидания:

http://software-test...resent/?p=61742

 

Возможно у вас на странице еще и Ajax загружается.
Загрузка страницы не означает окончание работы Ajax.

	int TimeOutLoadAjax = 30000; // 1000 = 1 сек.  
        int stepTime = 200; // Шаг ожидания
	public void WaitForAjax(IWebDriver Driver)// Метод ожидает окончания Ajax запроса на странице
        {
            int i = 0;
            while (TimeOutLoadAjax > (i = i + stepTime))
            {
                var ajaxIsComplete = (bool)(Driver as IJavaScriptExecutor).ExecuteScript("return jQuery.active == 0");// Это для ожидания завершения Ajax при использовании библиокеки jQuery
                if (ajaxIsComplete)
                {
                    // Тут логирование в случае окончания всех Ajax запросов на странице
                    break;
                }
                else if (TimeOutLoadAjax <= i)
                {
                    // Тут логирование в случае не удачи по окончанию времени
                }
                Thread.Sleep(stepTime);
            }
        }



#129290 Авторизация на портале Windows Form

Отправлено автор: fenixx 09 апреля 2014 - 05:16 в Selenium - Functional Testing

BrowserMobProxy
по-другому никак
Selenium WebDriver не работает с модальными окнами. В частности, аутентификацию силами только WebDriver сделать невозможно.

 

Спасибо.

Буду изучать.




#129376 Авторизация на портале Windows Form

Отправлено автор: fenixx 10 апреля 2014 - 13:57 в Selenium - Functional Testing

Те, кто пишет на C#, вместо BMP могут использовать FiddlerCore.

 

Спасибо.




#129294 Авторизация на портале Windows Form

Отправлено автор: fenixx 09 апреля 2014 - 06:06 в Selenium - Functional Testing

BrowserMobProxy
по-другому никак
Selenium WebDriver не работает с модальными окнами. В частности, аутентификацию силами только WebDriver сделать невозможно.

 

BrowserMobProxy написан на Java, я же пишу на C#, как быть в таком случае?




#129261 Авторизация на портале Windows Form

Отправлено автор: fenixx 08 апреля 2014 - 14:29 в Selenium - Functional Testing

Selenium v.2.41 WebDriver

 

Пробовал авторизироваться так:

http://login:password@domen

Не работает.

 

Задача состоит в том чтобы один тест прогнать в цикле под несколькими браузерами.

В частности FireFox, IE, Chrom, Safari.

 

Подскажите пожалуйста простой и надежный способ авторизации?

Или подскажите как через код C# обратиться к форме и заполнить поля данными?

Может примеры кода у кого есть или что почитать по решению данной задачи.

Прикрепленные изображения

  • 08-04-2014 18-16-18.png



#129618 Авторизация на портале Windows Form

Отправлено автор: fenixx 16 апреля 2014 - 07:26 в Selenium - Functional Testing

Посмотрите вот здесь примеры работы с FiddlerCore -- http://jimevansmusic.blogspot.ru/

 

Большое спасибо, буду разбираться.

 

Кстати если кому интересно временно решил проблему для браузеров Chrom, FireFox, Safari, под IE не работает т.к. там окно авторизации отличается от всех остальных.

Под другими браузерами не пробовал.

        void StartDriver(string MetodName)
        {
            FileLogs = DateTime.Now.ToString("dd-MM-yyyy HH-mm-ss ") + MetodName + ".txt";// Название файла. Название файла состоит из даты, времени запуска теста и названия тестового метода

            D = new ChromeDriver();

            D.Manage().Window.Maximize();// Разворачиваем браузер на весь экран
            SomeDelegate AsincAuth = AsincAuthenticate;
            AsincAuth.BeginInvoke("login", "pass", null, null);// Запускаю асинхронную функцию
            D.Navigate().GoToUrl(baseURL);// Переходим на главную страницу портала

            var BrowserName = D.Capabilities.BrowserName.ToString();
            Logs(" Браузер: " + BrowserName + " v." + D.Capabilities.Version.ToString());
        }
        delegate void SomeDelegate(string log, string pass);
        public void AsincAuthenticate(string log, string pass)
        {
            Thread.Sleep(3000);// Ставим задержку для появления окна авторизации
            SendKeys.SendWait(log);
            SendKeys.SendWait("{TAB}");
            SendKeys.SendWait(pass);
            SendKeys.SendWait("{ENTER}");
        }



#129377 Авторизация на портале Windows Form

Отправлено автор: fenixx 10 апреля 2014 - 14:01 в Selenium - Functional Testing

Кто уже использовал FiddlerCore или другой прокси для авторизации Selenium WebDriver, покажите пример кода авторизации на C# через прокси.

 

http://www.adathedev...ance-stats.html - Нашел статью как запустить прокси BrowserMob в Selenum WebDriver на C#, но не могу разобраться каким образом залогиниться через прокси.

 

https://github.com/A...ster.BrowserMob - тут исходник на C# для работы с прокси BrowserMob, взята из статьи указанной выше.

 

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

Помогите пожалуйста




#130411 Selenium FindElements Поиск элемента в элементе

Отправлено автор: fenixx 14 мая 2014 - 13:30 в Selenium - Functional Testing

Selenium v.2.41.0.0

Драйвер использую FirefoxDriver

Поиск элемента по XPath в элементе по XPath.

Пример:

// Получаю коллекцию
var tabs = D.FindElementsByXPath(XPathTabs); - работает

// Обращаюсь ко второму элементу в коллекции, и ищу внутри его все теги "а" через By.XPath
var tab3 = tabs[1].FindElements(By.XPath(@"//a")); // НЕ работает как надо. Возвращает коллекцию всех ссылок на странице

// Обращаюсь ко второму элементу в коллекции, и ищу внутри его все теги "а" через By.TagName.
var tab2 = tabs[1].FindElements(By.TagName("a")); // работает как надо. Возвращает коллекцию тегов "а" внутри "tabs[1]"

// Обращаюсь ко второму элементу в коллекции, и ищу внутри его все теги "а" через By.XPath
var tab3 = tabs[1].FindElements(By.XPath(@"./*" + "//a")); // работает как надо. Возвращает коллекцию тегов "а" внутри "tabs[1]"

Не понимаю почему при таком XPath-е:

XPath проверяю в FireFoxe через расширение FirePath

./*//a - возвращает коллекцию внутри элемента. - ничего не находит при проверке через FirePath

//a - А при таком ищет на всей странице

 

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