当前位置: 首页 > 知识库问答 >
问题:

单击给定网页上的多个链接在新选项卡中打开它们会出错

荆树
2023-03-14

我试图在一个新选项卡中打开给定网页上的每个链接,但通过单击两个链接,它会抛出此错误。任何建议都会有帮助。谢谢

这是我的代码

public class FirstClass {

    public static void main(String[] args) {

        System.setProperty("webdriver.chrome.driver",
                "chromedriver");

        WebDriver driver = new ChromeDriver();

        driver.manage().window().maximize();

        driver.manage().deleteAllCookies();

        driver.get("https://www.google.com/");

        Actions action = new Actions(driver);

        List<WebElement> web = driver.findElements(By.tagName("a"));

        for (int i = 1; i < web.size(); i++) {

            System.out.println(web.get(i).getText());
            action.moveToElement(web.get(i)).keyDown(Keys.CONTROL).click().build().perform();
        }

    }

}

这里有一个错误,我得到了-

Exception in thread "main" org.openqa.selenium.JavascriptException: javascript error: Failed to execute 'elementsFromPoint' on 'Document': The provided double value is non-finite.

共有1个答案

万俟浩
2023-03-14

代码失败,因为谷歌网页中的一些链接不显示,只有在执行某些操作时才能看到。导致代码失败的第一个链接是“报告不适当的预测”链接,点击搜索栏时可以看到。

要处理这些链接,当事情变得棘手时,需要遍历DOM。所以,我在代码中添加了一个JavaScriptExecutor,当给定的链接没有显示时,它就会出现在图片中。

请使用下面提到的代码打开谷歌主页中的每个链接:

System.setProperty("webdriver.chrome.driver", "chromedriver");

WebDriver driver = new ChromeDriver();

driver.manage().window().maximize();

driver.manage().deleteAllCookies();

driver.get("https://www.google.com/");

Actions action = new Actions(driver);

List<WebElement> web = driver.findElements(By.tagName("a"));

for (int i = 0; i < web.size(); i++) {
    if(web.get(i).isDisplayed()){
         action.moveToElement(web.get(i)).keyDown(Keys.CONTROL).click().build().perform();
    }else{
         String url = web.get(i).getAttribute("href");
         ((JavascriptExecutor)driver).executeScript("window.open('" + url + "', '_blank');");
     }
}

希望这有帮助。

 类似资料:
  • 问题内容: 在这种情况下有人可以帮助我吗: 方案是: 有一个网页,并且仅在新选项卡中打开所有指定的链接。现在,我试图单击新打开的选项卡中的任何一个链接。在下面尝试过,但是只单击了主/第一个选项卡中的一个链接,而不是新选项卡中的链接。 问题答案: 您将需要使用命令来访问第二个选项卡。 在打开第二个选项卡之前-获取打开的选项卡的windowHandle: 然后执行打开第二个选项卡的操作。现在,您需要知

  • 问题内容: 我想要的是发布需求,然后单击“ openTab”按钮,在新选项卡中打开响应html。无法使用来执行此操作。我认为这可能很简单,但是我找不到办法。 问题答案: 您可以使用$ window服务在此处在控制器中完成所有操作。$ window是全局浏览器对象窗口的包装。 为此,将$ window注入到控制器中,如下所示 重定向到动态路由时效果很好

  • 所以问题是,selenium在page1中搜索特定的项目。然后它点击它,根据网站的设计,它在一个新的标签中打开page2。如何让selenium跟随单击并在新选项卡上工作? 我虽然使用美丽的汤只是复制从page1的网址,但网站没有显示网址。相反,它显示了获取URL的函数。真的很奇怪,也很混乱。想法?

  • 问题内容: 我是jquery和bootstrap的新手,所以请考虑我的错误。我已经创建了用于登录和注册的bootstrap模式。它包含两个称为登录和注册的导航选项卡。我有两个按钮弹出相同的Modal窗口,但在Modal窗口中显示不同的选项卡。每个选项卡中都有一个带有许多输入的表单。我的问题是,当我单击“登录”按钮时,在模式中弹出“登录”选项卡时弹出模式,而当我单击页面上的“注册”按钮时,则打开注册

  • 这是我的URL路径< code > this . router . navigate([' BD-activity/dynamic form ',{ id: event.customer_id,opportunity_id: event。_ id }]);我希望它在另一个选项卡中打开。 我试过这个(URL,_blank)。这在这里不起作用。我正在研究角度11。如果你们有任何建议,请告诉我。我是An