Selenium webdriver 如何定位带有充满 JavaScript 的 http 响应的元素?

How Selenium webdriver locate element with a http response full of JavaScript?

我使用 selenium webdriver 来加速我的测试。在我的工作中,我们的网站将重定向到贝宝,供用户完成付款。但是,我无法让 selenium webdriver 找到 paypal 上的电子邮件和密码输入字段。

贝宝示例 URL : https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-07L974777B231831F#/checkout/login

我的代码演示可能是这样的:

    WebDriver m_driver = new FirefoxDriver();
    String redirected_url = "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-0AT82163FM860854K#/checkout/login";
    
    m_driver.get(redirected_url);
    Thread.sleep(15*1000);
    WebElement we = m_driver.findElement(By.xpath(".//*[@id='email']"));
    we.sendKeys("login_email");
    we = m_driver.findElement(By.xpath(".//*[@id='password']"));
    we.sendKeys("login_password");
    we = m_driver.findElement(By.xpath(".//*[@id='btnLogin']"));
    we.click();

我的问题:

使用该代码和在 paypal 网站上,我总是收到 'no such element' 发现异常的错误消息。

我可以在 Firefox 中找到带有 firepath 的元素,但我无法使 selenium webdriver 工作。

我知道这个错误可能是paypal登录页面整页的JavaScript引起的。我只是不知道如何处理这种情况。

您找不到这些元素的原因是 iframe。因此,在开始寻找元素之前使用 switchTo 方法和 switchTo iframe。 类似于:

driver.switchTo().frame("injectedUl");
WebElement we = m_driver.findElement(By.xpath(".//*[@id='email']"));
...