Не могу решить вопрос, как открыть в браузере новую вкладку?

Есть Шаринг на странице ( Google+/ FaceBook / Twitter)::: ( http://screencloud.net/v/1jlq2 )
На самой странице когда кликаешь открывается новая вкладка. Но когда делаешь это с помощью (Selenium+Java), он открывает новое окно браузера! Мне то нужно новая вкладка.

Пытаюся решить вот так :

 ((JavascriptExecutor)driver).executeScript("this.target='_blank';", driver.findElement(By.xpath(".//a[@href='/share/twitter']")));
 sleepALoop(10);`

Тест проходит но ничего не просходит(

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

driver.findElement(By.xpath(".//a[@href=’/share/twitter’]")).sendKeys(Keys.chord(Keys.CONTROL + “t”));

1 лайк

Что ж не так? Код не правильно добавил(

:::: Тема и содержимое вопросов

Создаваемый контент на сайте должен быть информативным. Т.е. это означает, что:

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

Пока код не будет должным образом отформатирован, тема будет скрыта. В faq по-моему все предельно ясно описано, даже с примерами.

П.С. @russiangunner, вы тоже не подавайте плохой пример новичкам.

Ваш совет помог но не до конца, он открывает новую вкладку, но пустую почему то?

Посмотрите)))

Пробуем еще, пока не научимся. :wink:

ну что не так( Так моя тема вида или нет(

Эта тема включена в списки и будет отображаться среди других тем.

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

Я вначале возмутился беспределом @ArtOfLife и попытался вернуть тему, а потом присмотрелся — он прав.

После переписки с @Wafe все таки удалось отформатировать код, и тут я понял, что проблема в другом :smile:
Совет: на жалейте строк кода на переменные:

WebElement lnkTwitter = driver.findElement(By.xpath(".//a[@href='/share/twitter']");
((JavascriptExecutor)driver).executeScript("this.target='_blank';", lnkTwitter));
sleepALoop(10);

Теперь стало намного яснее, что вы передаете вебэлемент как параметр.
Чтобы обратится к переданному параметру нужно использовать в JavaScript массив arguments. В нашем случае, это arguments[0];

Т.е:

WebElement lnkTwitter = driver.findElement(By.xpath(".//a[@href='/share/twitter']");
((JavascriptExecutor)driver).executeScript("arguments[0].target='_blank';", lnkTwitter));
sleepALoop(10);

Ну и предпоследнее, похоже на то что вы не кликаете по элементу.

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

Смотрите также:

1 лайк

Эта тема включена в списки и будет отображаться среди других тем.

1 лайк

Спасибо Вам! Буду пробывать, отпишусь что получилось и как обьязательно)

Я думаю, что вам всё равно, откроется ссылка в новой вкладке или в новом окне. Технически разницы никакой нет, с точки зрения теста всё работает одинаково в обоих случаях.

1 лайк

Добрый вечер, решение было найдено, и было отмечено:)

И тут у меня возник слудующий вопрос:
Есть тажа ссылка с атрибутом(“target=”_blank"),
как показано на скриншоте - ::frowning: http://screencloud.net/v/mIzi )
По умолчание она сама открывается в новой вкладке.
А как заставить ее открыть в текущем окне и сделать возрать назад?

Ну если это по-вашему - решение поставленного вопроса, тогда no comments.

Сорри не там поставил( Вопрос актуальный!

import java.awt.*;
import java.awt.event.KeyEvent;

Robot r = new Robot();
r.keyPress(KeyEvent.VK_CONTROL);
r.keyPress(KeyEvent.VK_T);
r.keyRelease(KeyEvent.VK_CONTROL);
r.keyRelease(KeyEvent.VK_T);