通过 Selenium WebDriver 接受“共享位置”浏览器弹出窗口

Posted

技术标签:

【中文标题】通过 Selenium WebDriver 接受“共享位置”浏览器弹出窗口【英文标题】:Accepting "Sharing Location" browser popups through Selenium WebDriver 【发布时间】:2012-12-19 19:28:50 【问题描述】:

我用谷歌搜索过,搜索过 SO,并查看了 Selenium Javadocs,但没有找到这个问题的答案。

有什么方法可以使用 Selenium WebDriver 来接受那些在网站试图跟踪您的位置时由浏览器(Chrome、Firefox、IE)显示的“共享位置”弹出窗口?

另外,我正在用 Java 编写 Selenium 代码并使用 Selenium 客户端驱动程序。

我尝试运行 Selenium IDE(Firefox 插件)并记录我接受 Firefox 弹出的“共享位置”弹出窗口,但 Selenium IDE 中没有记录任何内容。

【问题讨论】:

它用于测试允许用户启用位置跟踪的网站功能。 【参考方案1】:

如果弹出窗口是浏览器的一部分,那么答案是否定的。如果您想与第二个窗口(不是浏览器的一部分)中显示的内容进行交互,那么可以。应该有一个 .switch_to 方法。

尽管您可以让此页面记住您的设置,但您可以在创建浏览器的新实例时加载配置文件。

在 Windows 中,您可以通过转到开始菜单并在此处键入“firefox.exe -p”在 Firefox 中创建配置文件,您可以创建一个新配置文件,您可以在其中选中“记住我复选框”。

至于在 Java + Selenium 中加载配置文件,我不确定您将如何执行此操作。我使用 Ruby + Selenium,这就是我的做法。

$driver = Selenium::WebDriver.for :firefox, :profile => "MyProfile"

希望对你有帮助

【讨论】:

谢谢。你能告诉我更多关于加载配置文件的信息吗?这是我可以轻松谷歌的东西吗?我认为加载配置文件可能是答案,因为如果我不能通过 Selenium 以编程方式“接受”位置跟踪,测试将不会很有用。【参考方案2】:

我已经在 Firefox 中找到了解决方案,但仍在使用 chrome。下面的代码应该有助于获取您在地图上的确切位置:

    ProfilesIni profile = new ProfilesIni();
    FirefoxProfile myprofile = profile.getProfile("default");
    myprofile.setPreference("geo.prompt.testing", true);
    myprofile.setPreference("geo.prompt.testing.allow", true);
    myprofile.setPreference("geo.wifi.uri", "https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%");
    DesiredCapabilities capabilities = DesiredCapabilities.firefox();
    capabilities.setCapability(FirefoxDriver.PROFILE,myprofile);

在此之后只需在驱动方法中传递 FirefoxProfile 实例,如下所示(对于上面的代码):

    driver = new FirefoxDriver(myprofile);

应该没问题,写下你想要的所有其他东西并执行!

【讨论】:

以上是关于通过 Selenium WebDriver 接受“共享位置”浏览器弹出窗口的主要内容,如果未能解决你的问题,请参考以下文章

Selenium Webdriver - 设置首选浏览器语言DE

如何使用 python 处理 selenium 中嵌套 iframe 中的 cookie 接受按钮?

Python+Selenium学习笔记9 - 警告框处理

通过 Selenium 中的 webdriver 传递用户代理

如何使用 selenium webdriver 进行强制页面刷新?

webdriver(selenium+appium)