繁体   English   中英

动作类在Selenium Webdriver中以调试模式工作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM