Java 找硒元素

Java 找硒元素,java,selenium,Java,Selenium,我正试图找到元素,但出现了一个错误 这是我的代码: driver.get(baseURL); driver.manage().timeouts().implicitlyWait(10 ,TimeUnit.SECONDS); driver.manage().window().maximize(); //String parentHandle=driver.getWindowHandle(); driver.findElement(By.linkText("C

我正试图找到元素,但出现了一个错误 这是我的代码:

    driver.get(baseURL);
    driver.manage().timeouts().implicitlyWait(10 ,TimeUnit.SECONDS);
    driver.manage().window().maximize();
    //String parentHandle=driver.getWindowHandle();
    driver.findElement(By.linkText("Create Account")).click();
    System.out.println(driver.getCurrentUrl());

    //String currentWindow=driver.getWindowHandle();
    //driver.switchTo().window(currentWindow);
    //String currentURL=;
    //(currentURL);

    for (String winHandle : driver.getWindowHandles()) {
        driver.switchTo().window(winHandle); // switch focus of WebDriver to the next found window handle (that's your newly opened window)
    }

    driver.findElement(By.xpath("//html/body/div/div[1]/div[1]/div/div/form/div[1]/input")).sendKeys("9051902811");


    driver.close();
    //driver.switchTo().window(parentHandle);

    }
    catch(NoSuchElementException nsee){
        System.out.println(nsee.toString());
  }

    System.exit(0);
}
我得到了一个例外:

无法定位元素方法:xpath,selector://html/body/div/div[1] /div[1]/div/div/form/div[1]/input}命令持续时间或超时:89毫秒


请帮助……

根据您所展示的,很难确切说出问题所在。这可能是两件不同的事情

1元素是否存在?如果您显示html,这可以很快得到回答

XPath非常脆弱,并且非常容易出错。 尽可能使用不同的选择器,id和类更可靠。 这是该课程的链接

更具体的东西,当添加内容改变结构时,它不会破坏测试,XPath肯定会使测试变得脆弱

2输入框是否已加载

Selenium有时会尝试查找尚未加载的元素。将有助于解决此问题,您可以使用这些等待来等待元素可见、可单击、不可见等。不要使用thread.sleep,除非没有其他可能的选择

下面的代码可用于等待元素可见

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;


WebDriverWait wait = new WebDriverWait(driver, seconds);
wait.until(ExpectedConditions.visibilityOfElementLocated(By
            .xpath(xpath)));

可以使用XPath来确保元素是可见的,但是如果可能的话,你应该考虑使用一个不同的选择器,一个不会让你的测试很明显的选择。如果元素没有id/类,那么也可以将xpath锚定到更可靠的选择器,以减少一些脆弱性。


如果您提供html,我很乐意提供更多信息。

您能显示您试图访问的字段的html吗?另外,在尝试寻找元素之前,让它睡眠2秒钟,selenium具有快速进入的能力sometimes@Decypher那是个可怕的建议。。硒缺乏是有原因的。OP-do虽然显示您试图与之交互的字段的HTML,但显式等待有时会变快,就像睡眠有时也会变快一样。这是硒的一个已知问题,将计时器调高只是为了调试
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;


WebDriverWait wait = new WebDriverWait(driver, seconds);
wait.until(ExpectedConditions.visibilityOfElementLocated(By
            .xpath(xpath)));