【问题标题】:Selenium - How to open new Chrome Window, using Javascript ExecutorsSelenium - 如何使用 Javascript 执行器打开新的 Chrome 窗口
【发布时间】:2017-07-03 18:23:01
【问题描述】:

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

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

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

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

有没有人知道我如何才能完成这项工作?

【问题讨论】:

    标签: java selenium selenium-webdriver selenium-chromedriver


    【解决方案1】:

    您已经说过它不会向下滚动。所以这就是你问题的根源。 如果您只想要一个新窗口,则不需要为此创建另一个操作。

    window.onload = function() {
    document.getElementById("actualID").onclick = function(){
        return !window.open(this.href, "actualID", "width=666,height=666");
    }
    

    -使用您现有的代码,您可以打印以控制台元素的位置到 确认实际上可以看到编辑按钮(在 DOM 中)...调试。

    -首先为您的定位器使用 CSS 或 ID,然后再尝试其他的。

    您可以创建一个事件并将其包装到一个承诺中并使其更清洁。

    【讨论】:

    • 感谢您的回复——上面的代码 sn-p 在 Java 中会是什么样子?谢谢
    • 你可以将它包装在 JavascriptExecutor 中。看起来你已经想通了 :)
    【解决方案2】:

    好的,伙计们..

    我需要先将它滚动到视图中,然后我可以右键单击并在新窗口中打开它

    我遇到了问题,因为我真的想分 1 步完成,但我把它分成了 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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-18
      • 2017-05-01
      • 2023-03-25
      • 2022-10-02
      相关资源
      最近更新 更多