繁体   English   中英

如何自动接受 cookie 弹出窗口自动化 Java

[英]How can I auto accept cookies pop windows Automation Java

我的代码有什么问题,为什么自动点击在接受 cookie 按钮中不起作用。 本网站使用 angular 应用程序。

import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import com.paulhammant.ngwebdriver.ByAngular;
import com.paulhammant.ngwebdriver.NgWebDriver;

public class NewClass {

public static void main(String[] args) {
    
    System.setProperty("webdriver.chrome.driver",
            "C:\\Users\\Hp\\Downloads\\chromedriver_win32\\chromedriver.exe");
        ChromeDriver driver = new ChromeDriver();
                    NgWebDriver ngWebDriver = new NgWebDriver(driver);
                    ngWebDriver.waitForAngularRequestsToFinish();
        driver.get("https://visa.vfsglobal.com/ind/en/deu/login/");
        ngWebDriver = new NgWebDriver((JavascriptExecutor) driver);
        ngWebDriver.waitForAngularRequestsToFinish();           
        driver.findElement(ByAngular.options("onetrust-accept-btn-handler")).click();
 }

}

附上图片在这里只想自动点击这个弹出窗口

据我所知,无法使用ChromeOptions自动接受 cookie,您需要找到该元素并单击。

driver = new ChromeDriver();
driver.get("https://visa.vfsglobal.com/ind/en/deu/login/");
new WebDriverWait(driver, 30).until(ExpectedConditions.elementToBeClickable(By.id("onetrust-accept-btn-handler"))).click();

当你使用这条线时

driver.findElement(ByAngular.options("onetrust-accept-btn-handler")).click();

它会尝试立即找到元素,通常会导致错误。 导致 web 元素/元素未正确呈现。

这是我们应该选择由 WebDriverWait 实现的Explicit waits 的主要原因。

它们允许您的代码停止程序执行或冻结线程,直到您传递的条件解决为止。 以特定频率调用条件,直到等待超时结束。 这意味着只要条件返回一个假值,它就会继续尝试和等待。

代码 :

Webdriver driver = new ChromeDriver();
driver.manage().window().maximize();
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.elementToBeClickable(By.id("onetrust-accept-btn-handler"))).click();

请在输入用户名和密码之前添加等待功能,

如果输入时弹出中断,则用户名和密码将不正确。

就我而言,我创建了一个常用方法等待并单击,

   dh.wait_for_the_element_then_do(By.xpath("//button[text()='Accept All Cookies']"), "click", "", "cookies popo up");
   dh.wait_for_the_element_then_do(By.xpath("//input[@tcp-auto='input-username']"),"send", username, "login username");
   dh.wait_for_the_element_then_do(By.xpath("//input[@tcp-auto='input-password']"),"send", password, "login password");
   dh.wait_for_the_element_then_do(By.xpath("//span[text()='Sign in']"),"click", "", "signin button");

这是我的问题的解决方案。

import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import com.paulhammant.ngwebdriver.ByAngular;
import com.paulhammant.ngwebdriver.NgWebDriver;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.By;

public class NewClass {

public static void main(String[] args) {
    
    System.setProperty("webdriver.chrome.driver",
            "C:\\Users\\Hp\\Downloads\\chromedriver_win32\\chromedriver.exe");
        ChromeDriver driver = new ChromeDriver();
                    NgWebDriver ngWebDriver = new NgWebDriver(driver);
                    ngWebDriver.waitForAngularRequestsToFinish();
        driver.get("https://visa.vfsglobal.com/ind/en/deu/login");
                    driver.manage().window().maximize();
                    WebDriverWait wait = new WebDriverWait(driver, 30);
                    
        wait.until(ExpectedConditions
           .elementToBeClickable(By.id("onetrust-accept-btn-handler")))
           .click();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM