Java 硒罐';找不到动态web元素

Java 硒罐';找不到动态web元素,java,selenium,dynamic,selenium-webdriver,Java,Selenium,Dynamic,Selenium Webdriver,我正试图用Java为web应用程序编写一个Selenium测试脚本。应用程序有一个按钮,可在屏幕上动态添加表单字段。我遇到的问题是,我似乎无法让Selenium Web驱动程序识别新的表单元素。我首先尝试使用@FindBy初始化构造函数中的元素,如下所示: @FindBy(how = How.CSS, using = "#WIN_0_536870929") private WebElement form; 然后,我尝试使用显式等待来确保元素已加载(在将表单添加到DOM的按钮上): 但无论哪种方

我正试图用Java为web应用程序编写一个Selenium测试脚本。应用程序有一个按钮,可在屏幕上动态添加表单字段。我遇到的问题是,我似乎无法让Selenium Web驱动程序识别新的表单元素。我首先尝试使用@FindBy初始化构造函数中的元素,如下所示:

@FindBy(how = How.CSS, using = "#WIN_0_536870929") private WebElement form;
然后,我尝试使用显式等待来确保元素已加载(在将表单添加到DOM的按钮上):

但无论哪种方式,动态表单元素都无法加载。我得到的错误如下:

org.openqa.selenium.NoSuchElementException:无法定位元素:{“方法”:“id”,“选择器”:“#WIN_0_817000996”}

更令人困惑的是,当我在调试器中单步执行测试时,表单字段会在测试尝试访问它之前完全加载到DOM中


有人知道是什么原因导致了这种情况吗?

只有当您希望Web元素的可见性时,才需要定义它:

public static WebElement waitForVisibleElement( WebDriver driver, By locator, int timeOutInSeconds ) {
        WebDriverWait wdw = new WebDriverWait( driver, timeOutInSeconds );
        try {
            return wdw.until( ExpectedConditions.visibilityOfElementLocated(locator) );
        } catch ( NoSuchElementException | TimeoutException | NullPointerException ex ) {
            return null;
        }
    }

结果证明我试图访问iframe中的元素。非常感谢Vivek Singh建议我调查此事。我能够使用这行代码进入iframe:

this.driver.switchTo().frame(this.driver.findElement(By.cssSelector("#WIN_0_817000899 iframe")));

请检查可能包含该表单的任何框架或iFrame…是否尝试通过id访问该表单?Selenium通常是处理动态内容的最佳方法。你能分享你正在处理的代码和网页的url吗?所以你在某些应用程序的某个地方,使用一些脚本时遇到了一些问题?你想让我们给你一个具体的解决方案吗?仔细阅读并按照说明操作@SiKing这个问题很久以前就被更新了。现在符合你的标准了吗?
this.driver.switchTo().frame(this.driver.findElement(By.cssSelector("#WIN_0_817000899 iframe")));