【问题标题】:Access and handle chrome extension popup using selenium webdriver使用 selenium webdriver 访问和处理 chrome 扩展弹出窗口
【发布时间】:2019-03-21 07:48:33
【问题描述】:

我正在尝试使用 Selenium webdriver 安装 IBM DAP chrome 扩展。我无权访问 crx 文件。所以,我尝试通过 chrome 网上商店直接安装插件,如下:

browser = webdriver.Chrome()
browser.get('https://chrome.google.com/webstore/detail/dynamic-assessment-plugin/fnapgcgphlfhecijolobjodbbnjjpdga')
browser.maximize_window()
browser.implicitly_wait(5)
browser.find_element_by_css_selector("body > div.F-ia-k.S-ph.S-pb-qa > div.h-F-f-k.F-f-k > div > div > div.e-f-o > div.h-e-f-Ra-c.e-f-oh-Md-zb-k > div > div").click()
browser.switch_to_alert().accept()

但此代码无法访问弹出窗口并且无法单击“添加扩展”按钮。如何访问弹出窗口并点击“添加扩展”?

【问题讨论】:

    标签: selenium selenium-webdriver automation selenium-chromedriver


    【解决方案1】:

    这不是 javascipt 警报。它无法使用 Selenium Alert 处理。它是一个类似于文件上传窗口的原生操作系统相关窗口。

    在Java中,我们可以使用Robot类来模拟keyevent来处理这个。

    如果是windows os,我们可以使用AutoIt脚本来处理弹窗。请参考this related post for auto it usage。这是一个exe,可以用任何语言执行。

    我已经尝试在 java 中使用 Robot 类,它对我有用。

    import io.github.bonigarcia.wdm.ChromeDriverManager;
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.support.ui.ExpectedConditions;
    import org.openqa.selenium.support.ui.WebDriverWait;
    import java.awt.*;
    import java.awt.event.KeyEvent;
    import java.io.IOException;
    
    public class InstallChromeExtention {
        public static void main(String[] args) throws IOException, AWTException, InterruptedException {
            ChromeDriverManager.getInstance().setup();
            WebDriver driver = new ChromeDriver();
            driver.get("https://chrome.google.com/webstore/detail/google-keep-chrome-extens/lpcaedmchfhocbbapmcbpinfpgnhiddi");
            WebDriverWait wait = new WebDriverWait(driver, 60);
            WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("[aria-label='Add to Chrome']")));
            element.click();
            Thread.sleep(5000);
            Robot robot = new Robot();
            robot.keyPress(KeyEvent.VK_TAB);
            Thread.sleep(500);
            robot.keyPress(KeyEvent.VK_ENTER);
            Thread.sleep(500);
            wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("[aria-label='Remove from Chrome']")));
        }
    }
    

    【讨论】:

    • 感谢@Navarasu,我使用了 pyrobot 并且也为我工作。
    【解决方案2】:

    按照@Navarasu 解决方案,我从here 复制了pyrobot.py 文件。它对我来说非常好。

    from pyrobot import Robot
    from selenium import webdriver
    import time
    
    browser = webdriver.Chrome()
    browser.get('https://chrome.google.com/webstore/detail/dynamic-assessment-plugin/fnapgcgphlfhecijolobjodbbnjjpdga')
    browser.maximize_window()
    browser.implicitly_wait(15)
    browser.find_element_by_css_selector("[aria-label='Add to Chrome']").click()
    
    time.sleep(3)
    rob = Robot()
    rob.key_press('tab')
    rob.key_press('enter')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-28
      • 2015-06-29
      • 2012-07-16
      相关资源
      最近更新 更多