以下是我编写的代码。我尝试添加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();
}
}
答案 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之前提供等待。这肯定会奏效。