Fire Fox隐身窗口中的Selenium 3新标签

时间:2017-11-19 10:36:32

标签: java selenium firefox

我正在 Firefox 56 (56.0.2)两个标签 >使用 Selenium 3 (3.5.1) geckodriver ( 0.19.1)没有运气。在使用Firefox 47的Selenium 2中,我使用类似于上面的代码打开它,但是从这些版本开始它不再起作用了。任何人都知道我该怎么办?

我现在使用的代码:

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.firefox.internal.ProfilesIni;

public class Test {

    public static void main(String[] args) {
        ProfilesIni prof = new ProfilesIni();
        FirefoxProfile profile= prof.getProfile ("default");
        profile.setAcceptUntrustedCertificates(true) ;
        profile.setAssumeUntrustedCertificateIssuer(false);

        FirefoxOptions options = new FirefoxOptions();
        options.setProfile(profile);
        FirefoxDriver browser = new FirefoxDriver(options);

        browser.get("https://www.google.com");
        browser.findElement(By.xpath("//body")).sendKeys(Keys.chord(Keys.CONTROL, "t"));
    }
}

2 个答案:

答案 0 :(得分:0)

正如here所述:

  

Ctrl-T不是允许从内容运行的快捷方式。那么你   不应该用它来打开新标签。我不明白为什么   多进程功能应该在这里有所作为,以及为什么它应该   关闭它时工作。

     

正如我们所知道的bug 380637,一些网站会覆盖这些快捷方式。   目前仍然没有适当的解决办法。

     

如果要打开新选项卡,可以先加载HTML测试用例   https://dxr.mozilla.org/mozilla-central/source/testing/marionette/harness/marionette_harness/www/windowHandles.html   只需单击页面上的元素即可打开新选项卡。

所以你可以这样做:

        driver.get("https://www.google.co.uk/");
        org.openqa.selenium.JavascriptExecutor js;
        if (driver instanceof org.openqa.selenium.JavascriptExecutor) {
            js = (org.openqa.selenium.JavascriptExecutor)driver;
        }
        else {
            throw new IllegalStateException("This driver does not support JavaScript!");
        }

        js.executeScript("window.open('http://www.seleniumhq.org');");

enter image description here

答案 1 :(得分:0)

感谢@Davide,我能够解决它。

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.Keys;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.firefox.internal.ProfilesIni;

public class Test {

    public static void main(String[] args) {
        ProfilesIni prof = new ProfilesIni();
        FirefoxProfile profile= prof.getProfile ("default");
        profile.setAcceptUntrustedCertificates(true) ;
        profile.setAssumeUntrustedCertificateIssuer(false);

        FirefoxOptions options = new FirefoxOptions();
        options.setProfile(profile);
        options.addPreference("browser.tabs.remote.autostart.2", false); // This is the new line that fixed it
        FirefoxDriver browser = new FirefoxDriver(options);

        browser.get("https://www.google.com");
        browser.findElement(By.xpath("//body")).sendKeys(Keys.chord(Keys.CONTROL, "t"));
    }
}