2016-07-04 6 views
0

Я пытаюсь автоматизировать процесс в одном из моих тестов кодированного интерфейса, где я нажимаю правой кнопкой мыши на ячейку в таблице, и если «Вставить» 'включена. Я хочу ее выбрать.Кодированный пользовательский интерфейс: как повторить попытку щелчка правой кнопкой мыши по контекстному меню для проверки включенной опции

Однако эта кнопка включена только в том случае, если есть что-то, что нужно «Вставить», что не всегда так. Поэтому я хочу щелкнуть правой кнопкой мыши и проверить, включена ли опция «Вставить». Если нет, подождите 10 секунд и повторите попытку и, возможно, продолжайте делать это до 10 раз, а затем провалитесь. Лучшее, что я придумал до сих пор процесс, в котором я правой кнопкой мыши на ячейке, если кнопка Paste не включена, подождите 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)); 
    } 
} 

Я знаю, что-то вроде

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

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

ответ

0

Благодаря @MPavlak, ваше решение указал мне в правильном направлении. Мне пришлось внести несколько корректировок в ваш псевдокод, чтобы он работал для моего приложения.

Visual Studio настаивал, что я объявляю уаг rightClickCell =(), как rightClickCell = новое действие (() => и т.д. ...

WinContextMenu был на самом деле WinList, WinMenuItem оказался в Winbutton в этом списке наше приложение.

Я использовал SearchProperties [WinButton.PropertyNames.Name] вместо SearchProperties.Add, как его в соответствии с путем я обнаружил другие объекты в приложении.

мне пришлось добавить Нажми на главном ячейка внутри цикла while, так как щелчок правой кнопкой мыши на том же месте в ячейке не был фактически refre shing меню. В RightClickCell я мог бы изменить новую Точку (125, 10) в новую Точку (x, y) и, возможно, уменьшить значение x каждый раз, когда она пройдет через цикл while, таким образом перемещая правую точку в другую позицию. Но это больше строк кода, где левый щелчок по ячейке до правого щелчка дает тот же результат.

WaitForControlEnabled не найден, поэтому вызвало исключение, поэтому я использовал Thread.Sleep.

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)); 
} 

Если я пытаюсь определить rightClickCell с й, у значения я получаю ошибку: Delete «Действия не принимает 0 аргументов».

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

Я бы не переместил точку для клика, а вместо этого сосредоточился на чем-то еще, чтобы контекстное меню полностью исчезло. Рад, что я мог бы получить вас хотя бы частично. – MPavlak

+0

Ну, тогда я бы переместил точку правого клика, передав значение x и y для щелчка и уменьшив отметку x, чтобы меню появилось в немного другом месте. Однако я получаю сообщение об ошибке, когда я пытаюсь определить «rightclickcell()» со значением x и y. Я обновил вышеуказанный «Ответ» с моим кодом. – 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

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

  • Нет связанных вопросов^_^