Выбор нужного пункта из из контекстного меню (правой кнопкой мыши)

Здравствуйте. Использую Selenide. Подскажите, пожалуйста, как добраться до пунктов меню, которое появляется после клика правой кнопкой мыши? При использовании contextClick() меню появляется, а как выбрать нужный пункт - не могу понять. Спасибо

Так это смотря какое меню.
Если обычное контекстное меню (с пунктами Back, Reload, Save as…), то никак. Это типа нативный диалог, у вебдрайвера нет к нему доступа. Но хорошая новость в том, что и не надо. Это уже функционал браузера, а не вашего приложения, и его тестировать не надо.

А если это кастомный html-диалог, то там у элементов должны быть обычные селекторы, ищите пункты меню по ним.

1 лайк

да, я имел ввиду контекстное меню браузера. Спасибо за ответ. Мне это нужно было, чтобы открыть таким образом ссылку в новом окне в режиме инкогнито. Может тогда подскажите как открыть хром в режиме инкогнито во время выполнения теста (в то время, как одна копия Хрома уже запущена). С возможностью переключаться между этими окнами. Такое вообще возможно?)

Обычно это не нужно, потому что селениум и так открывает браузер с новым профилем. То есть это и так фактически режим инкогнито.

А так-то есть метод для открытия нового окна и переключения в него: Selenide.switchTo(newWindow(WINDOW));

И переключения между открытыми окнами: Selenide.switchTo(window());.

2 лайка

Обычно не нужно, согласен, но что делать с необычными случаями?) Нужно одновременно залогиниться на одном сайте под разными учетными данными. Тут или разные браузеры запускать или две копии одного браузера с одним инкогнито

Ещё раз: в случае селениум - все браузеры, которые ты открываешь, фактически в режиме инкогнито.

В общем, тебе подойдёт метод using. Открываешь два браузера и переключаешься между ними.
См. Вышла Selenide 5.4.1

2 лайка

Спасибо, сделал окнами одного браузера. Действительно, инкогнито или другой браузер тут не нужен.

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

такого метода вроде нет. Есть switchTo().window(индекс или тайтл). Но это переключение между вкладками. Я не так его использую?

Да, я их и имел в виду: switchTo().window(индекс или тайтл).
С точки зрения селениум, разницы между вкладками и окнами нет. Это по сути одно и то же.

А как селениум понимает, что переключать нужно тогда?) Если, например, открыто два окна с двумя вкладками в каждом, что будет переключаться в таком случае? Это же по сути два разных действия, как на них может быть один метод?) Как в моем случае: два окна по одной вкладке. Я делаю switchTo().window, желая переключить окно, селениум думает, что я хочу переключить вкладку, ее, естественно, не находит ее и выдает ошибку

Я такой сценарий не пробовал, но предположу, что для селениума это просто 4 разных окна. Переключайся в любое из них по индексу или названию.

1 лайк