Webdriver 目标="_blank"

8

页面有带超链接的图片,该超链接使用了target="_blank",每次点击该图片会加载新的Firefox浏览器,并且该超链接会在新的Firefox网页中打开,我会失去对当前网页的控制。

是否可以移除或更改该超链接上的target="_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 (警告:服务器未提供任何堆栈跟踪信息)

我的javascript不太好,所以我认为问题可能出在执行程序里。


+1,因为这个问题让我思考了一些创新的想法。但是,似乎我有限的知识并不足以帮助解决这个问题。我的祝愿是希望你成功。祝好。 - nIcE cOw
6个回答

4

不必点击图片,您可以直接通过链接进入URL:

WebElement link = (driver.findElement(By.xpath("//img[@alt='page']/parent::*"));
String href = link.getAttribute("href");
driver.get(href);

该URL受到保护,只能通过点击图像进入。 - Palaima
它如何受到保护?URL就是URL。你尝试过上述代码了吗? - Jeremiah Orr

3

请尝试以下方法:

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

你之所以会收到空指针异常,是因为你在javascript中使用了labels2,而它在这个上下文中并不存在。将其改为arguments[0]后,Selenium会正确地引用labels2参数并将其应用于javascript。


1

我认为你应该按照simeon sinichkin的建议使用SwitchTo().Window。然而,我不喜欢他的例子。这里有一个简单的例子。

 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

为什么你不想使用SwitchTo().Window呢?


你正在点击图片 - 现在我们来到了一个新窗口 =) 它现在的ID是1。我们需要切换到第一个窗口,它的ID是0。现在我们可以写:List<string> handle = new List<string>(WebDriver.WindowHandles); TestFramework.WebDriver.SwitchTo().Window(handle[windowNumber]); - Oleg Strokatyy
或者我们可以使用图像关闭第二个窗口 - WebDriver.SwitchTo().Window(windowName); WebDriver.Close(); - Oleg Strokatyy

1

在窗口中评估JavaScript将帮助您抑制target=blank链接。以下是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"链接


0
为什么不使用以下代码:
target="_self"

那个超链接有target="_blank",我需要通过使用webdriver + javascript来改变它的目标,或者还有其他方法吗?这可行吗? - Palaima
看一下这个可能会对你有帮助...http://stackoverflow.com/questions/2423064/dynamically-adding-target-attribute-to-a-collection-of-pre-existing-anchor-tags - Shashank Kadne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接