0

下面是我用 Java 编写的代码,用于执行涉及切换到 Windows 句柄的测试。

package com.Practice;

import java.util.Iterator;
import java.util.Set;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class Assignment4 {

    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\vikas\\Downloads\\chromedriver.exe");

        WebDriver driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.get("http://the-internet.herokuapp.com/");
        driver.findElement(By.xpath("(//div[@id='content']/ul)/li[33]")).click();
        driver.findElement(By.cssSelector("a[href*='windows']")).click();
        Set<String> windows = driver.getWindowHandles();
        Iterator<String> it = windows.iterator();
        String parentId = it.next();
        String childId = it.next();
        driver.switchTo().window(childId);
        System.out.println(driver.findElement(By.xpath("//h3[contains(text(),'New Window')]")).getText());
        driver.switchTo().window(parentId);
        System.out.println(driver.findElement(By.xpath("//div[@id='content']/div/h3")).getText());
    }

}

据我所知,我认为这段代码是正确的,但我仍然面临错误。我没有面临这样的元素例外。

Exception in thread "main" java.util.NoSuchElementException
    at java.base/java.util.LinkedHashMap$LinkedHashIterator.nextNode(LinkedHashMap.java:760)
    at java.base/java.util.LinkedHashMap$LinkedKeyIterator.next(LinkedHashMap.java:780)
    at com.Practice.Assignment4.main(Assignment4.java:22)
4

1 回答 1

0

此错误消息...

Exception in thread "main" java.util.NoSuchElementException

...暗示NoSuchElementException被引发,因为使用Locator Strategy找不到这样的元素。

要将带有文本的元素标识为Multiple Windows,您可以使用以下任一Locator Strategies

  • 路径

    driver.findElement(By.xpath("(//div[@id='content']//ul//li[33]"))
    

使用更规范的方法,您可以使用:

  • linkText

    driver.findElement(By.linkText("Multiple Windows"));
    
  • cssSelector

    driver.findElement(By.cssSelector("a[href='/windows']"));
    
  • xpath

    driver.findElement(By.xpath("//a[text()='Multiple Windows']"));
    
于 2021-02-21T13:17:47.663 回答