Selenium Webdriver:我无法切换到iframe

时间:2017-07-19 10:47:41

标签: selenium firebug firepath

以下是我编写的代码。我尝试添加thread.sleep()但是它仍然没有尝试使用chromedriver但结果相同

package com.thinksys.frames;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

public class Iframes 
{
    public static void main(String[] args) 
    {
        System.setProperty("webdriver.gecko.driver","C:\\Users\\thinksysuser\\Downloads\\geckodriver-v0.18.0-win64\\geckodriver.exe");

        WebDriver driver = new FirefoxDriver();
        driver.get("https://www.irctc.co.in/eticketing/loginHome.jsf");

        WebElement e = driver.findElement(By.id("google_ads_iframe_/37179215/DFP_NGET_01_HomePage_RHS_ATF_479x266_ENG_0"));

        driver.switchTo().frame(e);

        driver.findElement(By.xpath(".//*[@id='image-11']/a/img")).click();
    }
}

3 个答案:

答案 0 :(得分:1)

它可能由sep id中的特殊字符引起。使用部分ID将提供两个匹配,因此我建议您使用名称属性的两个部分

<ifram>
  

修改

图像旋转,每个图像仅在几秒钟内可见。要单击特定图像,您需要等待它可见。你可以使用显式等待它

WebElement frame = driver.findElement(By.cssSelector("[name*='google_ads_iframe'][name*='DFP_NGET_01_HomePage_RHS']"));
driver.switchTo().frame(frame);

这将每隔100毫秒对DOM进行极化,直到图像可见或时间到达(60秒)。

答案 1 :(得分:0)

展示广告的浏览器有所不同。我已经在Firefox中打开了,并且在以chrome显示时无法看到广告。当我使用脚本打开Chrome或Firefox浏览器时,没有广告部分。

根据这种情况,您可以检查天气框架是否可用,然后切换到它并等到您要点击的图像可见,然后点击它

您可以尝试这种方式:

WebDriverWait wait = new WebDriverWait(driver, 120);
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(driver.findElement(By.xpath("//iframe[starts-with(@id,'google_ads_iframe')][@title='3rd party ad content']"))));

wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath("//div[@id='image-11']/a/img")))).click();

WebDriverWait wait = new WebDriverWait(driver, 120);
List <WebElement> adFrame = driver.findElements(By.xpath("//iframe[starts-with(@id,'google_ads_iframe')][@title='3rd party ad content']"))
   if(adFrame.size()>0)
    {
        driver.switchTo().frame(adFrame.get(0));
        wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath("//div[@id='image-11']/a/img")))).click();
    }
    else
    {
        System.out.println("Sorry there is no ads");
    }

答案 2 :(得分:-2)

在切换到iframe之前提供等待。这肯定会奏效。