Java 在SeleniumWebDriver中,Action类在调试模式下工作

Java 在SeleniumWebDriver中,Action类在调试模式下工作,java,selenium-webdriver,automated-tests,Java,Selenium Webdriver,Automated Tests,我已经编写了代码,当我运行这是调试模式时效果很好,但是当我在正常模式下运行它时,我得到了以下异常 org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":".//*[@id='address-0']/span"} 我写的代码是: WebElement searchBox = driver.

我已经编写了代码,当我运行这是调试模式时效果很好,但是当我在正常模式下运行它时,我得到了以下异常

     org.openqa.selenium.NoSuchElementException: no such element: 
     Unable to locate element: {"method":"xpath","selector":".//*[@id='address-0']/span"}
我写的代码是:

    WebElement searchBox  = driver.findElement(By.id("search-input"));
    searchBox.sendKeys("somepostcode");
    Actions actions = new Actions(driver);
    actions.moveToElement(searchBox);
    WebElement address = driver.findElement(By.xpath(".//*[@id='address-0']/span"));
    actions.moveToElement(address);
    actions.click();
    actions.perform();
我不明白我应该把它放在哪里

我正在使用EclipseIDE。该功能的工作原理类似于当我在搜索框中放入一些邮政编码时,它会在运行时搜索一些地址,用户必须选择与邮政编码相关的任何地址。Ajax已被用于获取邮政编码

这里的搜索框是一个文本框


如果需要更多信息,请告诉我。

尝试在
WebElement address=driver.findElement(By.xpath(“./*[@id='address-0']/span”))之前添加一些等待时间

尝试在
WebElement address=driver.findElement(By.xpath(“./*[@id='address-0']/span”))之前添加一些等待时间

错误告诉您,您正试图在WebElement“address”在页面上可见之前创建其实例。 尝试添加“在之前等待”
WebElement address=driver.findElement(By.xpath(“./*[@id='address-0']/span”)

错误告诉您,您正试图在WebElement“address”在页面上可见之前创建其实例。 尝试添加“在之前等待”
WebElement address=driver.findElement(By.xpath(“./*[@id='address-0']/span”)

在这种情况下,当脚本在调试模式下工作,但在正常情况下失败时,几乎总是计时问题。因此,在您尝试查找该元素时,页面没有完全加载

在有问题的元素之前放置一个显式等待。使用显式等待通常不是最佳实践,但您可以快速尝试使用它,看看这是否解决了您的问题。如果这样的话,您可以在以后将其重构为更坚固的解决方案

WebElement myDynamicElement = (new WebDriverWait(driver, 10))

在这种情况下,当脚本在调试模式下工作,但在正常情况下失败时,几乎总是时间问题。因此,在您尝试查找该元素时,页面没有完全加载

在有问题的元素之前放置一个显式等待。使用显式等待通常不是最佳实践,但您可以快速尝试使用它,看看这是否解决了您的问题。如果这样的话,您可以在以后将其重构为更坚固的解决方案

WebElement myDynamicElement = (new WebDriverWait(driver, 10))

希望这对你有帮助

    WebElement searchBox  = driver.findElement(By.id("search-input"));

    searchBox.sendKeys("somepostcode");

    Actions actions = new Actions(driver);

    actions.moveToElement(searchBox);

    WebDriverWait wait = new WebDriverWait(driver, 20);

    wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(".//*[@id='address-0']/span")));

    WebElement address = driver.findElement(By.xpath(".//*[@id='address-0']/span"));

    actions.moveToElement(address);

    actions.click();

    actions.perform();

希望这对你有帮助

    WebElement searchBox  = driver.findElement(By.id("search-input"));

    searchBox.sendKeys("somepostcode");

    Actions actions = new Actions(driver);

    actions.moveToElement(searchBox);

    WebDriverWait wait = new WebDriverWait(driver, 20);

    wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(".//*[@id='address-0']/span")));

    WebElement address = driver.findElement(By.xpath(".//*[@id='address-0']/span"));

    actions.moveToElement(address);

    actions.click();

    actions.perform();

我把邮政编码分成两部分来解决这个问题

searchBox.sendKeys("postcodePart1");
searchBox.sendKeys("postcodePart2");

必须有一种更改事件正在调用。

我通过将邮政编码分为两部分解决了这个问题

searchBox.sendKeys("postcodePart1");
searchBox.sendKeys("postcodePart2");
必须有一种变化事件正在调用