在 java 中使用 Selenium 处理 iframe - .click() 不起作用

Handle an iframe witha Selenium in java - .click() doesn't work

提问人:Carlo Cumino 提问时间:10/16/2023 最后编辑:Carlo Cumino 更新时间:10/16/2023 访问量:41

问:

我开始学习硒,从手动测试切换到自动测试。 我正在遵循网站上的教程。但是当我第一次启动脚本并打开测试页面时,我发现了这个 cookie 接受(对不起,如果它是意大利语)enter image description here

在发现建议在iframe中后,我重写了脚本来处理它。我的想法是“现在我单击”全部接受“(Accetta tutti),然后我可以继续学习教程。不幸的是,click() 命令不起作用。

这是我的剧本:

 package newpackage;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;

public class popUpAutomation {
    
    @SuppressWarnings("deprecation")
    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "C:/Users/ccumi/Downloads/chromeDriver/chromedriver.exe");
        
        WebDriver chrome = new ChromeDriver();
        
        chrome.get("https://demo.guru99.com/popup.php");
        chrome.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
        int size= chrome.findElements(By.tagName("iframe")).size();
        System.out.println("iframe "+ size);
        
        chrome.switchTo().frame(3);

        System.out.println(chrome.findElement(By.xpath("//button[@id='save']/span/div")).getText());
        
        chrome.findElement(By.id("save")).click();  
    }
}

我不明白错误在哪里,因为在控制台上我看到在这一行中找到了该元素:

System.out.println(chrome.findElement(By.xpath("//button[@id='save']/span/div")).getText());
Java Selenium-Web驱动程序测试 selenium-chromedriver 自动测试

评论

0赞 pburgr 10/16/2023
放在 .chrome.manage().timeouts()...chrome.get("https://demo.guru99.com/popup.php");

答:

1赞 Shawn 10/16/2023 #1

请参阅下面的工作代码,并附有内联说明:

chrome.get("https://demo.guru99.com/popup.php");
chrome.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);;
int size= chrome.findElements(By.tagName("iframe")).size();
System.out.println("iframe "+ size);
        
// switch into the IFRAME with ID=gdpr-consent-notice
chrome.switchTo().frame(chrome.findElement(By.id("gdpr-consent-notice")));

System.out.println(chrome.findElement(By.xpath("//button[@id='save']/span/div")).getText());
        
// Below 2 lines will click on the Accept All button using JavaScript
WebElement element = chrome.findElement(By.xpath("//button[@id='save']/span/div"));
((JavascriptExecutor) chrome).executeScript("arguments[0].click();", element);

// Below line will come out of the IFRAME and switch to main HTML context 
chrome.switchTo().defaultContent(); 

控制台结果:

iframe 3
Accept All

评论

0赞 Carlo Cumino 10/16/2023
我今晚下班后再试试。;-)谢谢
0赞 Carlo Cumino 10/17/2023
测试一下:这是工作。谢谢!