Webdriverjs/protractor iframe切换不工作

Webdriverjs/protractor iframe switching not work

本文关键字:工作 iframe protractor Webdriverjs      更新时间:2023-09-26

我的一个自动化案例已经被阻止了超过1周,有一个延迟加载的iframe(点击链接会将这个iframe插入DOM),我的代码如下:

driver.get("my url");
driver.findElement(By.linkText('REGISTER')).click();
driver.wait(function() {
    console.log("WAITING FOR EXTERNAL IFRAME");
    return driver.findElement(By.css("div#main-container > iframe")).isDisplayed();
}, 8000, "WAIT TIMEOUT!!!!");
driver.switchTo().frame(1); // The iframe has no id and I have no control
// Manipulating in the iframe

每当我手动执行上述操作时,我100%确定单击"REGISTER"按钮后,页面上总共有两个iframe,即如果我执行document.getElementsByTagName("iframe"),我可以获得两个iframe !但是在自动化运行过程中,它总是失败,我真的不知道为什么,更重要的是,我确实看到了protractor和webdriverjs的调试提示,然而,我没有找到一个很好的方法在REPL中做DOM查询,都是因为webdriverjs的承诺控制流,任何有经验的调试提示在这里非常感谢!!

您可以使用三种方法处理iFrame:

  1. driver.switchTo().frame(1);
  2. driver.switchTo().default;如果没有提供id,它会切换到默认iframe
  3. driver.switchTo().index(0);-它会切换到默认的第一个索引

更新:有2个空格在HTML与iframe:在iframe,出iframe。在iframe中有一个子文档,子头部,子主体。当我们有一个iframe或多个iframe时,我们想在iframe中执行smt操作,我们可以:使用Element(广泛使用)或使用Index

  1. 选项1

driver = browser.driver;

var iframeElement = element(by.css('path_to_iframe');
browser.switchTo().frame(iframeElement.getWebElement());
driver.findElement(by.tagName('body')).click();  
driver.findElement(by.tagName('body')).sendKeys(string);
  • 选项2第一个iframe: index为0,第二个iframe index为1,然后继续…
  • browser.switchTo () .frame (0);

    browser.switchTo () .frame (1),

    每完成一个iframe,你需要切换出iframe。您需要:

    browser.switchTo().defaultContent();
    

    我在Selenium-java工作。下面的代码对我来说工作得很好。

    WebDriver driver = new FirefoxDriver();
    driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
    driver.get("https://developer.autodesk.com/");
    driver.findElement(By.id("btn_oxygen_registration")).click();
    WebElement iframe = driver.findElement(By.xpath("//iframe[contains(@src,'https://accounts.autodesk.com/register')]"));
    driver.switchTo().frame(iframe);
    driver.findElement(By.id("firstname_str")).sendKeys("EnterUsername");
    

    如果这对你有帮助,请告诉我