selenium/java没有这样的元素例外,对于从主页上链接之后的页面元素

k4emjkb1  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(354)

不熟悉自动化,需要一些帮助。
我在这个网站上使用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();

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

bd1hkmkf

bd1hkmkf1#

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

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

ghhkc1vu2#

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

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

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

相关问题