Opera WebDriver不会推出Opera(Selenium 3.1.0)

时间:2017-03-09 13:33:16

标签: java selenium selenium-webdriver automation opera

这是我的第一篇文章,所以我希望我会正确地提出要求。

正如标题所说,我很难通过Selenium WebDriver启动Opera浏览器(我已经尝试过3.1.0和3.2.0版本)。我用java编写代码。

我有一个代码,您可以在其中指定要使用的浏览器,然后指定要访问的网站。 Chrome和Firefox工作得很好,Opera给了我很多地狱。代码:

public class Browser {

    public WebDriver driver;

    public void startWebDriver (String browser) {
        if (browser == "Chrome") {
            driver = new ChromeDriver();
        }

        else if (browser == "Firefox") {
            System.setProperty("webdriver.gecko.driver", "c:\\Users\\...\\webdriver\\geckodriver.exe");
            driver = new FirefoxDriver();
        }

        else if (browser == "Opera") {
            ChromeOptions options = new ChromeOptions();
            options.addArguments("user-data-dir = c:\\Users\\...\\AppData\\Roaming\\Opera Software\\Opera Stable");
            options.setBinary("c:\\Program Files\\Opera\\43.0.2442.1144");
            DesiredCapabilities capabilities = new DesiredCapabilities();
            capabilities.setCapability(ChromeOptions.CAPABILITY, options);
            System.setProperty("webdriver.opera.driver", "c:\\Users\\...\\operadriver.exe");
            driver = new OperaDriver(capabilities);

失败:功能[{message = unknown error:Opera无法启动   (驱动程序信息:OperaDriver beta = 0.1(87cdb4f0d742fb950d1f0fca1f3f6b483e4fb69c),platform = Windows NT 10.0 x86_64),platform = ANY}] 会议ID:d02baabe92d8bbfd90641a00d2458aef

现在我遇到了一些麻烦,让驱动程序找到甚至找到Opera二进制文件......但是通过手动设置路径来管理。

我很好奇是否有人设法让Opera通过WebDriver工作。在GitHub上,一些人声称他设法让它工作,但使用RemoteWebDriver同时" hacking"使用ChromeDriver而不是OperaDriver运行Opera。我也试过了,它也没有用(过程就是你发现哪个Chromium是基于你的Opera - 我的是Opera 43,它是基于Chromium 56,使用铬驱动程序2.27 - 更多关于你可以看到的那个过程的信息:https://github.com/operasoftware/operachromiumdriver/issues/27,但他在Mac上做到了,我不知道,因为我在Windows机器上可能存在一些差异。

据我所知,没有歌剧本身的官方支持。

这些天有人在Opera上运行Selenium吗?如果是这样,你是如何实现这一目标的?也许我错过了一些非常基本的东西......

任何提示或建议赞赏:)

3 个答案:

答案 0 :(得分:0)

不确定你是否仍在寻找答案,但这是我如何使用红宝石中的selenium 3.3实现歌剧执行。

语法
service = Selenium::WebDriver::Chrome::Service.new("<path to operadriver>", <any free port>, {optional so leave it blank}) service.start

例如:
service = Selenium::WebDriver::Chrome::Service.new("/usr/local/bin/operadriver", 12345, {}) service.start cap = Selenium::WebDriver::Remote::Capabilities.chrome('operaOptions' => {'binary' => '/Applications/Opera.app/Contents/MacOS/Opera', 'args' => ["--ignore-certificate-errors"]}) driver = Selenium::WebDriver.for(:remote, :url => service.uri, :desired_capabilities => cap)

在java中也有一种非常类似的方法,但步骤或逻辑保持不变 1)在某个空闲端口上启动ChromeService
2)启动chrome远程上限,但传递opera和--ignore-certificate-errors选项的二进制 3)将服务和封顶的URL传递给远程webdriver

答案 1 :(得分:0)

我可以通过以下方式在Opera驱动程序3.4.0(本地运行)中在Opera 46,Windows 10中运行我的测试:

System.setProperty("webdriver.chrome.driver", "operadriver.exe");
ChromeOptions options = new ChromeOptions();
options.setBinary("C:\\Program Files\\Opera\\46.0.2597.39\\opera.exe");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
driver = new ChromeDriver(capabilities);

答案 2 :(得分:0)

使用最新的Selenium 3.13和OperaDriver v2.37 您可以使用:

string LibraryDir = new FileInfo((new System.Uri(Assembly.GetExecutingAssembly().CodeBase)).AbsolutePath).DirectoryName.Replace("%20", " ");
OperaOptions ooptions = new OperaOptions();
ooptions.BinaryLocation = @"C:\Program Files\Opera\54.0.2952.54\opera.exe";
_Browser = new OperaDriver(LibraryDir, ooptions);

LibraryDir是operadriver.exe的位置(应安装Nuget软件包) BinaryLocation应该指向可执行的Opera浏览器!