2016-09-20 5 views
3

В Ranorex я нашел, как ждать существования элемента, но я не нахожу, как ждать, когда элемент виден.Как подождать элемента видно на Ranorex?

enter image description here

Я хочу сделать то же самое, но я хочу, чтобы ждать, пока элемент не виден. К сожалению, я просто вижу Exist и Not Exist как возможные значения для инструкции WaitFor. И в моем случае тест ненадежный, потому что клик иногда запускается, несмотря на существование элемента, но все еще не отображается.

Вы знаете, как это сделать, пожалуйста?

ответ

0

для веб-элементов, то трудно понять, существует ли элемент, виден и т.д.

я достиг надежности, используя расположение DOM страницы и ширину, сравнивая их, в моем примере, скользящий позиция меню и ширину, следующим образом:

Public Function IsMenuVisible() As Boolean 
     Dim menuVisible As Boolean 

     'Get page position and width 
     Dim pageXPosition As Integer = repo.WebPage.Self.Element.ScreenLocation.X 
     Dim pageWidth As Integer = repo.WebPage.Self.Element.ScreenRectangle.Width 
     'Get configuration menu position and width 
     Dim menuXPosition As Integer = repo.WebPage.Menu.Self.Element.ScreenLocation.X 
     Dim menuWidth As Integer = repo.WebPage.Menu.Self.Element.ScreenRectangle.Width 

     'If menu top right location is >= web page size (out of screen) 
     If menuXPosition + menuWidth > pageXPosition + pageWidth Then 
      Report.Info(String.Format("Configuration menu is hidden (menuXPositon = {0}, pageXPosition = {1}, pageWidth = {2}, menuWidth = {3}).", menuXPosition, pageXPosition, pageWidth, menuWidth)) 
      menuVisible = False 
     Else 
      Report.Info("Configuration menu is currently visible.") 
      menuVisible = True 
     End If 

     Return menuVisible 
    End Function 

В моем примере меню расположено в правой части страницы. Пожалуйста, внесите изменения в соответствии с вашими потребностями.

Затем сделать простой пользовательский код в цикле несколько раз, так что меню выглядит следующим образом:

 Public Sub WaitForMenuToAppear() 
     Dim retries As Integer = WaitForMenuToAppearRetries 
     While Not IsMenuVisible() AndAlso retries > 0 
      retries -= 1 
      Report.Info(String.Format("Waiting for configuration menu to be visible ({0}).", retries)) 
      Delay.Duration(1000) 
     End While 

     If Not IsMenuVisible() Then 
      Throw New RanorexException(String.Format("Menu did not appear within '{0}' seconds.", WaitForMenuToAppearRetries)) 
     Else 
      Report.Info("Menu is visible.") 
     End If 
    End Sub 

Я должен был сделать это, так как скольжение всегда видна. Используя функцию подсветки Ranorex Spy, красный прямоугольник выведен за пределы области просмотра веб-страницы.

Я оставляю вам для завершения примера.

Надеется, что это помогает ...

+0

Кажется, было так много людей, просящих об этом, что Ranorex, наконец, находится в процессе его непосредственного интегрирования, поскольку вы можете читать в этой [голосовой статье пользователя Ranorex] (http://uservoice.ranorex.com/forums/150109-ideas-to-improve-ranorex/suggestions/17162687-create-function-for-wait-for-visible-and-wait -для) – Sup3rHugh

0

Вы можете использовать Visible свойства ждать элемента:

DateTime start = DateTime.Now; 

while (Repository.Element.Visible) 
{    
    Delay.Seconds(1); 

    if(System.DateTime.Now.Subtract(start).TotalSeconds > MaxWaitTime) 
    {     
     Validate.Fail(""); 
    } 
} 
0

Вы можете добавить этот элемент в вашем пути репо [@visible='true'] и использовать WaitForExists:

repo.elementInfo.WaitForExists(SearchTimeOut)