我在页面上有一个编辑按钮。我想在新窗口中打开它。
目前,此代码将单击编辑按钮并在默认窗口中打开它:
Actions actions = new Actions(driver);
JavascriptExecutor jse = (JavascriptExecutor) driver;
actions.moveToElement(elem1).click();
jse.executeScript("arguments[0].click()", elem1);
要在另一个窗口中打开它,我尝试做类似
的操作Actions newwin = new Actions(driver);
newwin.keyDown(Keys.SHIFT).click(elem1).keyUp(Keys.SHIFT).build().perform();
但是,这会返回一个错误,因为它实际上没有移动到该元素并找到它。如果我在脚本运行时向下滚动到编辑按钮的位置,编辑页面将在新窗口中打开,如所需。 但是,每次运行Selenium脚本时,我都不想手动向下滚动到编辑按钮。
我尝试过这样的事情:
Actions newwin = new Actions(driver); newwin.moveToElement(elem1).keyDown(Keys.SHIFT).click(elem1).keyUp(Keys.SHIFT).build().perform();
但它仍然无法选择编辑元素并在新窗口中打开它。
有没有人有任何想法如何让这项工作?
答案 0 :(得分:1)
你已经说过它没有向下滚动。这是你问题的根源。 如果你只是想要一个新窗口,你不需要为此创建另一个动作。
window.onload = function() {
document.getElementById("actualID").onclick = function(){
return !window.open(this.href, "actualID", "width=666,height=666");
}
- 使用现有代码,您可以打印到控制元素的位置 确认实际可以看到编辑按钮(在DOM中)...调试。
- 首先使用定位器的CSS或ID,然后尝试其他人。
你可以创建一个事件并将其包装成一个承诺并使其更清洁。
答案 1 :(得分:0)
好的,有人......
我首先需要将其滚动到视图中,然后我可以右键单击并在新窗口中打开它
我遇到了问题,因为我真的想一步完成,但我将其分解为2:
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);",
elem1);
Thread.sleep(500);
Actions newwin = new Actions(driver);
newwin.keyDown(Keys.SHIFT).click(elem1).keyUp(Keys.SHIFT).build().perform();