【问题标题】:How can I auto accept cookies pop windows Automation Java如何自动接受 cookie 弹出窗口自动化 Java
【发布时间】:2021-12-04 17:11:32
【问题描述】:

我的代码有什么问题,为什么自动点击在接受 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();
 }

}

这里附上图片

【问题讨论】:

    标签: java angular selenium automation


    【解决方案1】:

    当你使用这条线时

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

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

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

    它们允许您的代码暂停程序执行,或冻结线程, 直到你通过它的条件解决。条件被称为 一定的频率,直到等待超时。这 意味着只要条件返回一个假值,它就会 继续尝试和等待。

    代码:

    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();
    

    【讨论】:

      【解决方案2】:

      据我所知,无法使用 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();
      

      【讨论】:

        【解决方案3】:

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

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

        在我的例子中,我创建了一个通用方法等待并单击,

           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");
        

        【讨论】:

          【解决方案4】:

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

          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();
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-04-26
            • 2021-12-19
            • 2018-01-31
            • 1970-01-01
            • 2021-11-09
            • 2021-12-22
            • 1970-01-01
            相关资源
            最近更新 更多