【问题标题】:typing in Iframe firefox输入 iframe firefox
【发布时间】:2012-11-02 18:58:38
【问题描述】:

我在 java 中使用 Selenium Webdriver(第二个)

我想弄清楚如何在 IFrame 中输入内容。现在,我是:

WebDriver driver = new FirefoxDriver(); Wait<WebDriver> wait = new WebDriverWait(driver, 30) wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#cke_contents_textarea1 iframe"))).sendKeys("Test Text");

html 是: <td id="cke_contents_textarea1" class="cke_contents" style="height:200px" role="presentation"><iframe style="width: 657px; height: 100%; " frameborder="0" title="Rich text editor, textarea1, press ALT 0 for help." src="" tabindex="-1" allowtransparency="true"> </iframe> </td>

我已经编辑了很多代码,所以我可能会错过粘贴一些东西。

我已验证光标出现在文本框内(当我选择不同的 iframe 时,光标也会移动) 在 Iframe 中输入不同的代码吗?

【问题讨论】:

    标签: iframe selenium webdriver selenium-webdriver


    【解决方案1】:

    请参考示例代码:我使用的网站包含 iFrame。 (注意:您必须确保在我们的网页源代码中包含 iframe)

    WebDriver driver = new InternetExplorerDriver();
    driver.get("http://www.packagemapping.com/example1.htm#.UJS4DFIerb8");
    
    driver.switchTo().frame(driver.findElement(By.name("frame_track")));
    System.out.println(driver.findElement(By.xpath("//*[@id='table2']/tbody/tr/td[3]/font")).getText());
    driver.findElement(By.name("shipper")).sendKeys("DHL");
    

    【讨论】:

      【解决方案2】:

      我很惊讶您在没有切换到 iframe 的情况下看到光标。 试试这个方法

      driver.switchTo().frame(driver.findElement(By.id("frameId")));
      //do your stuff
      driver.switchTo().defaultContent();
      

      【讨论】:

      • 如何选择要 .sendKeys() 的元素?我试了正常的方法,还是不行。
      • 您也可以通过id="cke_contents_textarea1"选择发送密钥。另外,我很确定您提交的 textarea 不在 iframe 内。所以简单地做driver.findElement(By.id("cke_contents_textarea1")).sendKeys("Test Text");
      【解决方案3】:

      要在 iframe 中输入,请使用以下 Java 代码进行 selenium Webdriver。

      driver.switchTo().frame((WebElement)driver.findElement(By.xpath("在此处输入iframe的xpath"))); driver.findElement(By.xpath("iframe 文本框的 xpath")).sendKeys("testing"); driver.switchTo().defaultContent();

      【讨论】:

        【解决方案4】:

        发生这种情况是因为元素未完全加载。在我的情况下,将 Thread.sleep(1000) 放在 sendKeys 之前就可以了。

         WebElement iFrameElmnt = cntntPnlFrmWrpr.findElement(By.tagName("iframe"));
                    driver.switchTo().frame(iFrameElmnt);
                    WebElement inputText = driver.findElement(By.id("__o3id0"));
                    Thread.sleep(1000);
                    inputText.sendKeys("12344");
        

        【讨论】:

        • Thread.sleep 几乎总是一个坏主意。它要么等待太久(如果元素在 1 秒之前出现),要么等待太短(如果页面在一秒后仍在加载)。使用 WebDriverWait 等待元素出现。
        猜你喜欢
        • 2016-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-19
        • 2011-08-31
        • 1970-01-01
        • 1970-01-01
        • 2018-03-22
        相关资源
        最近更新 更多