Python 使用Selenium Webdriver访问运行在QT Webkit之上的嵌入式设备UI

Python 使用Selenium Webdriver访问运行在QT Webkit之上的嵌入式设备UI,python,selenium-webdriver,automated-tests,qtwebkit,Python,Selenium Webdriver,Automated Tests,Qtwebkit,我有一个嵌入式设备,运行QT Webkit显示GUI。我需要使用QTWebDriver访问设备QTWebKit浏览器。没有看到太多关于如何继续的例子。有人能帮我吗?您需要在QApplication启动gui的过程中启动QtWebDriver 为了做到这一点,你需要将你的应用程序链接到QtWebDriver的lib和headers 例如,要将webdriver支持添加到QT5.5/Src/qtbase/examples/widgets/mainwindows/mainwindow示例,首先修改ma

我有一个嵌入式设备,运行QT Webkit显示GUI。我需要使用QTWebDriver访问设备QTWebKit浏览器。没有看到太多关于如何继续的例子。有人能帮我吗?

您需要在QApplication启动gui的过程中启动QtWebDriver

为了做到这一点,你需要将你的应用程序链接到QtWebDriver的lib和headers

例如,要将webdriver支持添加到QT5.5/Src/qtbase/examples/widgets/mainwindows/mainwindow示例,首先修改mainwindow.pro:

+++ mainwindow.pro  2017-01-13 15:06:53.048081230 -0800
@@ -1,6 +1,17 @@
 TEMPLATE = app

-QT += widgets
+QT += widgets quick
+INCLUDEPATH += /home/user/qtwebdriver/out/dist/desktop/release/Test
+INCLUDEPATH += /home/user/qtwebdriver/out/dist/desktop/release/h
+LIBS += -L/home/user/qtwebdriver/out/dist/desktop/release/libs
+LIBS += -lchromium_base -lWebDriver_core -lWebDriver_extension_qt_base -lWebDriver_extension_qt_quick -lWebDriver_extension_qt_quick_web -lWebDriver_extension_qt_web
+DEFINES += QT_NO_SAMPLES="1" 
其次,在应用程序中包含webdriver标题,并调用wd_setupargc、argv

您可以将此附加代码标记为仅包含在测试生成中

然后运行GUI。默认情况下,webdriver在端口9517上启动

您可以使用Selenium的RemoteWebDriver连接到QtWebDriver

 DesiredCapabilities capability = new DesiredCapabilities();
 //Start WebDriver by reusing existing widget UI
 capability.setCapability("browserStartWindow", "*");
 driver = new RemoteWebDriver(new URL("http://remotehost:9517"), capability)
 selectWindow("http");
 etc...

 private String selectWindow(String protocol) {
    Set<String> windowHandles = driver.getWindowHandles();

    for (Iterator<String> iterator = windowHandles.iterator(); iterator.hasNext();) {
        String w = iterator.next();
        driver.switchTo().window(w);
        if (driver.getCurrentUrl().startsWith(protocol))
            return w;
    }
    return null;
}
browserStartWindow功能指示QtWebDriver选择它找到的第一个窗口

如果您的WebView嵌入到本机窗口小部件中,您将需要迭代所有窗口句柄并选择包含html内容的窗口,因此使用selectWindow:

一旦选择了正确的子窗口,就可以进行常规的selenium测试

您可以在QtWebDriver wiki中找到此信息:


可以通过我电脑上的浏览器访问webkit URL吗?@python101,你是什么意思?如果您的意思是从Selenium获取WebDriver的当前URL,那么可以使用driver.getCurrentUrl。如果要检查WebDriver当前打开的页面,请将-wi serverarg传递给wd_安装程序。然后,您将能够通过打开在PC上使用远程web检查器http://remotehost:9222. 有关webdriver参数的列表,请参阅。这正是我所需要的。谢谢
 DesiredCapabilities capability = new DesiredCapabilities();
 //Start WebDriver by reusing existing widget UI
 capability.setCapability("browserStartWindow", "*");
 driver = new RemoteWebDriver(new URL("http://remotehost:9517"), capability)
 selectWindow("http");
 etc...

 private String selectWindow(String protocol) {
    Set<String> windowHandles = driver.getWindowHandles();

    for (Iterator<String> iterator = windowHandles.iterator(); iterator.hasNext();) {
        String w = iterator.next();
        driver.switchTo().window(w);
        if (driver.getCurrentUrl().startsWith(protocol))
            return w;
    }
    return null;
}