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

fenixx

Регистрация: 11 мар 2014
Offline Активность: 21 дек 2016 06:14
-----

Мои сообщения

В теме: Нестабильное прохождение тестов.

27 мая 2014 - 11:27

Столкнулся с проблемой в ожидании завершения всех 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);
            }
        }

В теме: Нестабильное прохождение тестов.

27 мая 2014 - 07:12

У меня легкий когнитивный диссонанс: 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

 

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


В теме: Нестабильное прохождение тестов.

27 мая 2014 - 06:48

Столкнулся с проблемой в ожидании завершения всех 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);
            }
        }

В теме: Selenium FindElements Поиск элемента в элементе

15 мая 2014 - 08:15

Отрабатывает одинаково и ошибки выдает правильно. "./*//*[contains(@class,'control-label')]" - нет такого элемента, и findElements выдает size==0, а findElement эксепшен.
Еще раз: если вы используете findElement[s] и xpath в контексте WebElement, то:
1. Если xpath начинается с "./" - поисковым контентом будет являться искомый WebElement
2. Если xpath начинается с "/" - поисковым контентом будет являться root документа.

 

Большое спасибо за разъяснение!!!

var AllControls = D.FindElementsByXPath(@"//*[@id='PortfolioEditFormtab1']//*[contains(@class,'control-label')]/.."); 
string Selector = @"//*[contains(@class,'control-label')]");
var sel222 = AllControls[0].FindElement(By.XPath(@"." + Selector);//Так все работает верно )))Огромное спасибо!!!

В теме: Selenium FindElements Поиск элемента в элементе

15 мая 2014 - 06:50

Повезло! =работает правильно. В плане механики между findElements и findElement разницы нету.
Если нашли разницу - давайте код и сорс, т. к. либо вы заблуждаетесь, либо это баг.

 

 

Прикрепленный файл  15-05-2014 9-40-44.png   18,47К   3 Количество загрузок:

string XPathActivityTab = @"//*[@id='PortfolioEditFormtab1']";
string XPathAllLabel = @"//*[contains(@class,'control-label')]";
string XPathParent = @"/..";

var AllControls = D.FindElementsByXPath(XPathActivityTab + XPathAllLabel + XPathParent);
var sel1 = AllControls[0].FindElement(By.XPath(@"//*[contains(@class,'control-label')]"));
var sel11 = AllControls[0].FindElements(By.XPath(@"//*[contains(@class,'control-label')]"));
var sel22 = AllControls[0].FindElements(By.XPath(@"./*//*[contains(@class,'control-label')]"));
var sel222 = AllControls[0].FindElement(By.XPath(@"/./*" + @"//*[contains(@class,'control-label')]"));// Если так то работает
var sel2 = AllControls[0].FindElement(By.XPath(@"./*" + @"//*[contains(@class,'control-label')]")); // Выдает ошибку

Прикрепленный файл  15-05-2014 10-22-02.png   134,99К   0 Количество загрузок:

var tabs = D.FindElementsByXPath(@"//*[@id='tabs']");
var sel1  = tabs[1].FindElement(By.XPath(@"//a"));
var sel2  = tabs[1].FindElement(By.XPath(@"./*//a"));
var sel11 = tabs[1].FindElements(By.XPath(@"//a"));
var sel22 = tabs[1].FindElements(By.XPath(@"./*//a")); // Отрабатывает без ошибки 

Страница HTML

Прикрепленный файл  Test.7z   273,72К   2 Количество загрузок:

 

Почему отрабатывает по разному, и как с этим быть?