[英]Action class works in debug mode in selenium webdriver
我已经编写了代码,在调试模式下运行时效果很好,但是在正常模式下运行时,出现以下异常
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();
我无法理解应该在哪里等待。
我正在使用Eclipse IDE。 该功能的工作原理类似于将一些邮政编码放入搜索框中时,它会在运行时搜索一些地址,并且用户必须选择与该邮政编码相关的任何地址。 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 = driver.findElement(By.xpath(".//*[@id='address-0']/span"));
在这种情况下,当脚本在调试模式下运行但在正常模式下失败时,几乎总是时序问题。 因此,在尝试查找该元素时,页面只是没有完全加载。
在有问题的元素之前进行明确的等待。 通常,使用显式等待不是最佳实践,但是您可以快速尝试一下,看看是否可以解决您的问题。 如果是这样,您可以稍后将其重构为更坚固的解决方案。
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();
我通过将邮政编码分成两部分来解决了这个问题
searchBox.sendKeys("postcodePart1");
searchBox.sendKeys("postcodePart2");
一定有一个on change事件正在调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.