如何在 Selenium Java 中获取框架并切换到?

How to get the frame and switch to in Selenium Java?

我花了一个多小时来寻找类似的案例,但没有任何帮助。我是 Java 和 Selenium 的新手,目前只有一名开发 Selenium Automation 脚本的成员。

好的,目标系统的HTML代码结构如下

例如,我点击顶部框架上的元素所做的是(简化代码段);

Page page = new Page();

page.setTopFrame();
page.a_button.click();
class Page{
    @FindBy(id="a_button")
    public WebElement a_button;

    public void setTopFrame() {
        driver.switchTo().frame("topframe");
    }
}

但是当我 运行 这编码它 returns “org.openqa.selenium.NoSuchElementException” 异常。 我不知道我现在错过了什么。任何建议将不胜感激。

--已编辑-- 由于我 post 这个,发现其他异常是“NullPointerException:无法调用”org.openqa.selenium.SearchContext.findElement(org.openqa.selenium.By)”,因为“this.searchContext”为空。

页面 class 中的构造函数应使用来自主测试 class 的驱动程序进行初始化。像。

Page page = new Page(driver);

页面 class 有

class Page{
    WebDriver driver;

    public Page (WebDriver driver){
        this.driver = driver;
        PageFactory.initElements(driver, this);
    }
...
}

也许您目前处于另一个框架中。所以尝试:

public void setTopFrame() {
    driver.switchTo().defaultContent();
    driver.switchTo().frame("topframe");
}

页面class{ WebDriver驱动程序;

public Page (WebDriver driver){
    this.driver = driver;
    PageFactory.initElements(driver, this);
}

... }

谢谢大家阅读我的问题。 我希望这个答案能帮助遇到同样问题的人。