Selenium - 如何使用Javascript执行程序

时间:2017-07-03 18:23:02

标签: java selenium selenium-webdriver selenium-chromedriver

我在页面上有一个编辑按钮。我想在新窗口中打开它。

目前,此代码将单击编辑按钮并在默认窗口中打开它:

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

但它仍然无法选择编辑元素并在新窗口中打开它。

有没有人有任何想法如何让这项工作?

2 个答案:

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