webdriver target =“_ blank”

时间:2012-01-13 12:43:50

标签: java firefox selenium webdriver target

页面有超链接的图像,超链接有target =“_ blank”,每次按下该图像加载新的Firefox,该超链接被重定向到新的firefox网页  我失去了对该网页的所有控制权。 是否可以在超链接上删除或更改目标=“_ blank”,因为我想在同一个webdriver中加载网页

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 个答案:

答案 0 :(得分:3)

您可以直接转到链接中的网址

,而不是点击图片
WebElement link = (driver.findElement(By.xpath("//img[@alt='page']/parent::*"));
String href = link.getAttribute("href");
driver.get(href);

答案 1 :(得分:1)

在窗口中评估javascript将帮助您抑制target = blank链接 以下是Webdriver docs

中的示例
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”

答案 2 :(得分:1)

你为什么不想使用SwitchTo()。窗口?

答案 3 :(得分:1)

尝试以下方法:

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();

您将获得一个null异常,因为您在javascript中使用了labels2,而在该上下文中不存在arguments[0]。通过将其更改为{{1}} Selenium将采用labels2参数并在javascript中正确引用它。

答案 4 :(得分:1)

我认为你应该使用simeon sinichkin建议的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);

希望有所帮助

答案 5 :(得分:0)

为什么不使用:

target="_self"