如何使用Selenium Java点击target=_blank链接使其在当前窗口打开
问题根源
- 你写的代码存在3个问题,直接导致报错和功能失效:
- 直接把Java侧的
WebElement对象拼接到JavaScript字符串中,linkpath作为Java对象直接拼接时会自动调用toString()方法,输出类似WebElement: xxxx的带冒号的内容,插入JS代码后直接触发语法异常,也就是你遇到的Unexpected token ':'报错。 - JavaScript原生没有
document.getElementByXpath这个方法,本身的查找逻辑就不成立。 - target属性的标准当前窗口值是
_self,你写的self不符合规范,就算修改成功也不会生效。
- 直接把Java侧的
解决方法
Selenium的JavascriptExecutor本身支持直接传入WebElement作为参数,在JS代码中用arguments[0]即可直接获取传入的元素对象,不需要在JS侧重新查找元素。
修改后的可运行代码如下:
WebElement linkpath = driver.findElement(By.xpath("//div[text()='vivo Y12G (Glacier Blue, 64 GB)']")); JavascriptExecutor js = (JavascriptExecutor) driver; // 直接传入linkpath作为JS的参数,用arguments[0]指代该元素 js.executeScript("arguments[0].setAttribute('target', '_self')", linkpath); linkpath.click();
内容的提问来源于stack exchange,提问作者Dewulkar Shubham
相关产品推荐
相关产品推荐

