有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Selenium/Java没有这样的元素例外,在从主页链接之后,页面的元素也不例外

不熟悉自动化,需要一些帮助

我在这个网站上使用Selenium Webdriver和Java-Webdriver University,到目前为止,这段代码在“Element.click()”步骤中没有抛出这样的元素异常(即,在页面上找不到该元素):

      driver.manage().window().maximize();
        driver.get("http://webdriveruniversity.com");

        Thread.sleep(3000);
// Follow the link to another page
        WebElement link = driver.findElementByXPath("(//div[@class=\"section-title\"])[6]");
        link.click();
        Thread.sleep(3000);
// Click on the element
        WebElement element = driver.findElementByXPath("(//button[@class='accordion'])[1]");
        element.click();

然而,当我直接转到链接页面时,它发现元素很好

 driver.manage().window().maximize();
        driver.get("http://webdriveruniversity.com/Accordion/index.html");

// Click on the element
    WebElement element = driver.findElementByXPath("(//button[@class='accordion'])[1]");
        element.click();

我使用了等待元素可见性和线程休眠,结果相同。 知道这里有什么问题吗


共 (2) 个答案

  1. # 1 楼答案

    希望下面的代码能解决您的问题

    Used the getWindowHandles() to capture handle of newly opened tab and switch to the 
    tab
    
    // Follow the link to another page
    WebElement link = driver.findElement(By.xpath("(//div[@class=\"section-title\"][6]"));
    link.click();
    Set<String> allWindow = driver.getWindowHandles();
    Iterator<String> itr = allWindow.iterator();
    while (itr.hasNext()) {
    String wind = itr.next().toString();
    driver.switchTo().window(wind);
    }
    Thread.sleep(3000);
    
    // Click on the element
    WebElement element = driver.findElement(By.xpath("(//button[@class='accordion'][1]"));
    element.click();
    Thread.sleep(3000);
    driver.close();
    }
    
  2. # 2 楼答案

    你有没有注意到,当你点击链接时,页面会在“新建”选项卡中打开?这是你的问题。 你需要切换到新标签

    ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles());
    
    driver.switchTo().window(tabs.get(1)); //here you are switch to second tab