Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

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

selenide
selenium
Теги: #<Tag:0x00007f7b6504bc48> #<Tag:0x00007f7b6504bb08>

(Tatyana Durova) #1

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

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

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


(Дмитрий Мирошник) #2

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


(Tatyana Durova) #3

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


(Максим Наталич) #4

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

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

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

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


(Tatyana Durova) #5

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


(Mr Ds Low) #6

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


(Максим Наталич) #7

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


(Tatyana Durova) #8

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

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

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


(Mr Ds Low) #9


https://developer.chrome.com/apps/api_index


(Максим Наталич) #10

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


(Tatyana Durova) #11

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


(Tatyana Durova) #12

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

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

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

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

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


Как перемещаться по вкладкам при помощи python и seleniumWD?
(Дмитрий Кравчук) #13

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


(Tatyana Durova) #14

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


(Vitalii Grygoruk) #15

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