Java 如何使用Selenium处理具有动态id的iFrame和包含多个iFrame(id以公共字符串开头)的单个页面

Java 如何使用Selenium处理具有动态id的iFrame和包含多个iFrame(id以公共字符串开头)的单个页面,java,selenium,iframe,dynamic,selenium-webdriver,Java,Selenium,Iframe,Dynamic,Selenium Webdriver,一个页面包含多个具有动态ID的iframe ID看起来像这样 ext-comp-1005, ext-comp-1031-.x-边框-面板 如何处理其中一个iframe中的元素? 我有个建议,可以用这样的东西 findElement(By.css(“iframe:first of type”) 这不是完整的/有效的代码。 有谁能解释一下这句话的意思,或者你是如何处理这种情况的 我可以进入页面上的每个框架并搜索WebElement,但是有没有最佳的方法 当前代码: int total = drive

一个页面包含多个具有动态ID的iframe

ID看起来像这样

ext-comp-1005, ext-comp-1031-.x-边框-面板

如何处理其中一个iframe中的元素? 我有个建议,可以用这样的东西 findElement(By.css(“iframe:first of type”)

这不是完整的/有效的代码。 有谁能解释一下这句话的意思,或者你是如何处理这种情况的

我可以进入页面上的每个框架并搜索WebElement,但是有没有最佳的方法

当前代码:

int total = driver.findElements(By.tagName("iframe")).size();
for (int i = 0; i < total; i++) {
    driver.switchTo().frame(i);
    try {
        driver.findElement(By.xpath(("sample xpath")))
        .click();
        break;
    } catch (Exception e) {
        System.out.println("not present in frame " + i);
    } finally {
        driver.switchTo().defaultContent();
    }
}
int total=driver.findElements(按.tagName(“iframe”)).size();
对于(int i=0;i
您可以愉快地切换到所需的框架,任何定位器都可以是xpath

driver.switchTo().frame(driver.findElement(By.xpath("//your iframe xpath here")));
若您的框架位于任何其他框架内,这意味着若您所需的元素位于innerframe内,则首先切换到OuterFrame,然后再次切换到innerframe

正如你们所知道的,下面的命令用于从所有帧中取出

  driver.switchTo().defaultContent();
我希望您能够理解xpath,即使id是动态变化的。如果在查找frame的xpath时遇到任何困难,请发布HTML代码。当然,如果存在类名称和名称,您可以直接使用它们,而不是xpath

谢谢