页面有超链接的图像,超链接有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所以我觉得那个执行者是个问题
答案 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"