2016-07-04 5 views
0

코딩 된 UI 테스트 중 하나에서 프로세스를 자동화하려고합니다. 여기에서 테이블의 셀을 마우스 오른쪽 단추로 클릭하고 '붙여 넣기 '버튼이 활성화되어 있습니다.코딩 된 UI : 사용 가능한 옵션을 확인하기 위해 상황에 맞는 메뉴를 마우스 오른쪽 단추로 클릭하는 방법

그러나이 버튼은 '붙여 넣기'가있는 경우에만 활성화되며, 항상 그렇지는 않습니다. 그래서 마우스 오른쪽 버튼을 클릭하여 '붙여 넣기'가 활성화되어 있는지 확인하고 싶습니다. 그렇지 않은 경우 10 초를 기다렸다가 다시 시도하십시오. 최대 10 회까지 계속 수행 한 다음 실패 할 수 있습니다. 가장 좋은 나는 내가 좋아하는 것을 알고 있어요

Mouse.Click(Cell1, MouseButtons.Right, ModifierKeys.None, new Point(125, 10)); 
while (!PasteButton.Enabled) 
    { 
    System.Threading.Thread.Sleep(10000); 
    Mouse.Click(Cell1, MouseButtons.Right, ModifierKeys.None, new Point(125, 10)); 
    if (PasteButton.Enabled) 
    { 
     Mouse.Click(Cell1, new Point(54, 12)); 
    } 
} 

.. 내가 바로 붙여 넣기 버튼이 활성화되어 있지 않은 경우, 셀을 클릭 10 초 기다렸다가 다시 시도 지금까지 과정을 마련했습니다

PasteButton.WaitForControlPropertyEqual(PasteButton.Value, "Paste", 60000); 

그러나 자동으로 새로 고침되지 않으므로 마우스 오른쪽 버튼을 클릭하여 버튼이 활성화 될 때까지 기다릴 수 없습니다. 따라서 컨텍스트 메뉴를 마우스 오른쪽 버튼으로 클릭하여 계속 확인해야합니다.

답변

0

감사 @MPavlak, 당신의 해결책은 올바른 방향으로 절 지적했다. 내 응용 프로그램에서 작동하도록 가상 코드를 약간 조정해야했습니다.

Visual Studio에서 내가 var에 rightClickCell =()를 선언한다고 주장으로 rightClickCell = 새로운 액션 (() => 등 ...

WinContextMenu 실제로이었다 WinList이 WinMenuItem 그 목록에 Winbutton 밝혀졌다 우리의 응용 프로그램.

나는 내가 응용 프로그램에서 다른 개체를 발견 한 방법과의 일치로 [WinButton.PropertyNames.Name] 대신 SearchProperties.Add의 SearchProperties을 사용했다.

내가 주에 클릭을 추가했다 while 루프 내에서 셀의 동일한 지점을 마우스 오른쪽 버튼으로 클릭하면 실제로 리플렉션되지 않았습니다. 메뉴를 쑤셔 라. rightClickCell에서 새 Point (125, 10)를 새 Point (x, y)로 변경하고 while 루프를 통과 할 때마다 x 값을 감소시켜 올바른 위치를 다른 위치로 이동시킬 수 있습니다. 그러나 더 많은 코드 행이 있습니다. 마우스 오른쪽 버튼을 클릭하기 전에 셀을 클릭하면 동일한 결과가 생성됩니다.

WaitForControlEnabled를 찾을 수 없으므로 예외가 발생하여 Thread.Sleep을 사용했습니다. 내가 X로 rightClickCell을 정의하려고하면

var rightClickCell = new Action(() => Mouse.Click(cell1, MouseButtons.Right, ModifierKeys.None, new Point(125, 10))); 
var contextMenu = new WinList(uIContextMenu); 
var pasteMenuItem = new WinButton(contextMenu); 
pasteMenuItem.SearchProperties[WinButton.PropertyNames.Name] = "Paste"; 

rightClickCell(); 
while (!pasteMenuItem.TryFind() || !pasteMenuItem.Enabled) 
{ 
    Mouse.Click(cell1, new Point(10, 10)); 
    rightClickCell(); 
    Thread.Sleep(5000); 
} 

if (pasteMenuItem.Enabled) 
{ 
    pasteMenuItem.DrawHighlight(); 
    Mouse.Click(pasteMenuItem, new Point(10, 10)); 
} 

, Y 값은 내가 오류를 얻을 : 삭제 '조치 0 인수를 고려하지 않습니다'.

var rightClickCell = new Action(() => Mouse.Click(cell1, MouseButtons.Right, ModifierKeys.None, new Point(int x, int y))); 
+0

나는 클릭에 대한 포인트를 옮기지 않고 컨텍스트 메뉴가 완전히 사라지도록 다른 것에 집중한다. 다행히 나는 적어도 부분적으로 당신을 얻을 수 있습니다. – MPavlak

+0

그럼 메뉴가 약간 다른 지점에 나타나도록 x 및 y 값을 클릭하여 전달하고 x를 감소시켜 마우스 오른쪽 버튼을 움직일 수 있습니다. 그러나 내가 시도하고 x와 y 값으로 'rightclickcell()'을 정의 할 때 오류가 발생합니다. 나는 위의 'Answer'를 내 코드로 업데이트했다. – John

+0

나는 여전히 요점을 옮기지 않고 클릭을하지 않을 것이다. 페이지에서 다른 것을 찾아서 초점을 맞추면 메뉴가 사라지고 같은 지점에서 다시 오른쪽을 클릭 할 수 있습니다. – MPavlak

1

오른쪽 클릭 이외의 조치를 취하지 않으면 붙여 넣기 위해 클립 보드에 어떤 일이 생깁니 까? 테스트 할 수있는 방법이 있다면 수표를 개선 할 수 있지만 그렇지 않으면 올바른 일을하는 것처럼 보입니다. 그래도 코드를 약간 변경합니다.

var rightClickCell =() => Mouse.Click(Cell1, MouseButtons.Right, ModifierKeys.None, new Point(125, 10)); 

rightClickCell(); 
while (!PasteButton.Enabled); 
{ 
    System.Threading.Thread.Sleep(10000); 
    rightClickCell(); 
} 

if (PasteButton.Enabled) 
{ 
    // PROBABLY DO NOT WHAT TO DO THIS 
    // instead, find the context menu and click the item 
    // whose name/text is "Paste" 
    Mouse.Click(Cell1, new Point(54, 12)); 
} 

더 나은, 더이 같은 아마 뭔가 :

var rightClickCell =() => Mouse.Click(Cell1, MouseButtons.Right, ModifierKeys.None, new Point(125, 10)); 

// pseudo code 
var contextMenu = new WinContextMenu(Cell1); 
var pasteMenuItem = new WinMenuItem(contextMenu); 
pasteMenuItem.SearchProperties.Add("Name", "Paste"); 

rightClickCell(); 
while(!pasteMenuItem.TryFind() || !pasteMenuItem.Enabled) 
{ 
    rightClickCell(); 
    WaitForControlEnabled(pasteMenuItem, 10 * 1000); 
} 

if(pasteMenuItem.Enabled) 
{ 
    Mouse.Click(pasteMenuItem); 
} 
+0

감사합니다. 두 번째 옵션은 90 % 작동합니다. Visual Studio는 내가 다르게 몇 가지 작업을 수행하기를 원했습니다. 이것은 작동 버전입니다. – John

관련 문제