Selenium/Java 在从主页关注 link 后,页面元素没有此类元素异常

Selenium/Java No Such Element Exception for elements of a page after following a link from homepage

自动化新手,需要一些帮助。

我在本网站上使用 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();

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

您是否注意到当您单击 link 时,页面会在新标签页中打开?那是你的问题。 您需要切换到新标签页。

ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles());

driver.switchTo().window(tabs.get(1)); //here you are switch to second tab

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

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