Как отрыть новую вкладку с определенным url в фоном режиме (приложение самое ничего не открывает)

Есть приложение, которое измеряет visibility определенных элементов на странице с помощью вставки в страницу java script кода и записи лога. И в одном специфичном тесте мне надо проверить что объект на странице пользователю виден не был вообще. Проверить я это могу из лога, но проблема заключается в том, что я не знаю как находясь на одной странице открыть новую вкладку с определенным url адресом, в фоне. Переходить мне на нее новую вкладку не надо вообще.

И в идеалле сдлеать без java script. Sendkeys у меня почему то вообще не сработал, и думаю это мне подойдет.
Selenide.switchTo() новую вкладку не создает. Еще другая проблема, я так поняла надо создавать кастомный проифль браузера для открытый новых вкладок вместо окон?

Делаю на java +maven + selenide

Как вариант, открыть лог в другой вкладке, проверить, что всё OK, закрыть лог (соответственно, вернётесь на предыдущую вкладку). Это если нет вариантов проверить visible на соответствующем контроле, не дёргая лог.

Нет, лог я вообще из другого места проверяю, мне просто открыть вкладку с определенным волос надо без перехода на нее и потом ее закрыть.

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

String mainTab = getWebDriver().getWindowHandle();
((JavascriptExecutor)getWebDriver()).executeScript(“window.open(“URL”);”);
getWebDriver().switchTo().window(mainTab);

А если вообще без перехода то придется изворачиваться с js.

Так же если новая вкладка у вас открывается кликом по элементу то можно с помощью селениума сделать Ctrl+click по нему и будет так как вы хотите (без перехода).

Ctrl click видимо только, то есть навешать на даже ведь и свойство _blank вешать не надо? А закрыть ее как без перехода на неё?

Какое-то противоречие в описании задачи. Нужно проверить лог. Лог открывается в новой вкладке, на нее нельзя переходить (по условию), и эти логи в другой вкладке “я вообще из другого места проверяю” проверяются из другого места.:thinking: Что?

Напишите пожалуйста подробнее зачем вам нужно открывать вкладку и почему на неё не нужно переходить. И что происходит на первой вкладке?

в общем я пока просто так делаю,

        actions.keyDown(Keys.CONTROL).click($(By.cssSelector(".btn-xs"))).keyUp(Keys.CONTROL).perform();

Новая вкладка открывается, все хорошо. Как ее закрыть без переход на нее?

Насколько я понял в предлагаемом скрипте все равно совершается переход на вкладку, а следом она закрывается, аналогично можно сделать и на селениуме через getWindowHandles.

Как я поняла, мне надо переключить scope к этой вкладке, но визуально ее не отображать.

По каким то причинам когда я открываю новую вкладку таким образом

        actions.keyDown(Keys.CONTROL).click($(By.cssSelector(".btn-xs"))).keyUp(Keys.CONTROL).perform();

и пытаюсь переключится на scope нового окна с помощью

java.util.Set<String> windowHandles = driver.getWindowHandles();

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

Насколько я понял, в определенный момент выполнения теста вам необходимо сходить на определенный URL не теряя фокуса с текущей вкладки. Если это так, то в качестве костыля могу предложить:
В момент, когда нужно открыть вкладку на фоне, вместо этого запустить еще один браузер в безголовом режиме сделать все дела в нем и закрыть его.

1 лайк

звучит как план

@Tatyana_Durova а вы не рассматривали вариант без вкладок и браузеров? Взять любой HttpClient и сделать через него запрос по тому URL который вас интересует, проверить что в Response Body есть то что нужно.

2 лайка