0

我正在使用 PhantomJS 和 Selenide 来自动化网页浏览活动的 IntelliJ 项目。为了运行 Javascript 命令,我们在 Java 代码中使用了 executeJavascript() 方法。我们在代码中多次调用此方法来执行我们想要的 Javascript 命令。

对于这种特殊情况,我们正在制作一个程序,该程序应自动将我们登录到Footlocker

程序代码:

public Boolean doInBackground() {
    WebDriver driver = getWebDriver();

    System.out.println("Running Footlocker");
    open(account.getEarlyLink()); //opens URL
    System.out.println("Running Footlocker");
    if (!loggedIn) {
        WebDriverRunner.setWebDriver(driver);

        $("#guest_welcome_login").shouldBe(visible).click();

        $("#login_container").shouldBe(visible);
    }
             executeJavaScript("$('html').find('iframe').eq(1).contents().find('#login_email').val('%s')", account.getUsername());
        executeJavaScript(String.format("$('html').find('iframe').eq(1).contents().find('#login_password').val('%s')", account.getPassword()));
        executeJavaScript("$('html').find('iframe').eq(1).contents().find('button.button.cta_button').click()");
        $("#member_welcome").shouldBe(visible);
}

当我们运行程序时,executeJavascript() 命令实际上并没有被执行,但是当我们在 IntelliJ 表达式执行器(在调试器中)中一个一个地运行每个命令时,它们就起作用了。

有人知道这里发生了什么吗?

4

1 回答 1

0

您是否尝试切换到框架?

通常在 Selenium 中,您需要切换到 frame/iframe 才能访问其元素。像这样:

switchTo(frame(1));
executeJavaScript("$('#login_email').val('%s')", account.getUsername());
于 2016-07-01T18:21:40.103 回答