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");
必须有一种变化事件正在调用