webdriver target = "_ blank" - PullRequest
       23

webdriver target = "_ blank"

5 голосов
/ 13 января 2012

Страница имеет изображение с гиперссылкой, и эта гиперссылка имеет target = "_ blank", и каждый раз, когда я нажимаю, изображение загружает новый Firefox, и эта гиперссылка перенаправляется на эту новую сеть Firefox и я теряю контроль над этой веб-страницей. Возможно удалить или изменить эту цель = "_ blank" для гиперссылки, потому что я хочу загрузить веб-страницу в тот же веб-драйвер

WebDriver driver = new FirefoxDriver();

    driver.get("http://www.page.eu/");
    WebElement submit;
    submit = driver.findElement(By.xpath("//img[@alt='page']"));
    submit.click();

эта гиперссылка имеет target = "_ blank" мне нужно как-то изменить эту цель с помощью webdriver + javascript, может быть, или как? это возможно?

изм

спасибо за предложения, но все же эта проблема я пытался сделать как Grooveek сказал, но без изменений

WebElement labels2 = driver.findElement(By.xpath("//a[@href='http://tahtpage.net']"));
    WebElement aa = (WebElement) ((JavascriptExecutor)  driver).executeScript("labels2.setAttribute('target','_self')",labels2 );
    aa.click();

у меня ошибка org.openqa.selenium.WebDriverException: null (ВНИМАНИЕ: сервер не предоставил никакой информации о трассировке стека)

Я не очень хорош в javascrit, так что я думаю, что проблема в этом исполнителе

Ответы [ 6 ]

3 голосов
/ 13 января 2012

Вместо того, чтобы нажимать на изображение, вы можете просто перейти по ссылке в ссылке:

WebElement link = (driver.findElement(By.xpath("//img[@alt='page']/parent::*"));
String href = link.getAttribute("href");
driver.get(href);
1 голос
/ 30 сентября 2013

Я думаю, вам следует использовать окно SwitchTo ()., Как это было предложено Симеоном Синичкиным. Однако мне не понравился его пример. Вот простой пример.

 driver.Navigate().GoToUrl(baseURL);
 //Get the Main Window Handle
 var baseWindow = driver.CurrentWindowHandle;
 // navigate to another window (_blank)
 driver.FindElement(By.Id("btn_help")).Click();
 Thread.Sleep(2000);
 //switch back to Main Window
 driver.SwitchTo().Window(baseWindow);

надеюсь, что поможет

1 голос
/ 13 января 2012

Попробуйте следующее:

WebElement labels2 = driver.findElement(By.xpath("//a[@href='http://tahtpage.net']"));
WebElement aa = (WebElement) ((JavascriptExecutor) driver).executeScript("arguments[0].setAttribute('target','_self')",labels2 );
aa.click();

Вы получаете пустое исключение, потому что вы используете labels2 в своем javascript, которого нет в этом контексте.Изменив его на arguments[0] Selenium примет параметр label2 и сочтет его соответствующим образом в javascript.

1 голос
/ 13 января 2012

Почему бы вам не использовать SwitchTo (). Window?

1 голос
/ 13 января 2012

Оценка javascript в окне поможет вам подавить target = пустые ссылки. Вот пример из Документов Webdriver

List<WebElement> labels = driver.findElements(By.tagName("label"));
List<WebElement> inputs = (List<WebElement>) ((JavascriptExecutor)driver).executeScript(
    "var labels = arguments[0], inputs = []; for (var i=0; i < labels.length; i++){" +
    "inputs.push(document.getElementById(labels[i].getAttribute('for'))); } return inputs;", labels);

Адаптируйте его для изменения DOM, чтобы выбрасывать target = "_blank links "

0 голосов
/ 13 января 2012

Почему вы не используете:

target="_self"
...