测试包含带有Appium的WKWebView的iOS应用程序时的行为不一致

Mah*_*dam 6 node.js appium appium-ios

我正在为使用WKWebviews显示一些数据的iOS应用程序创建自动化测试.用户在本机文本字段中键入查询,结果显示在webview中.问题是我在检查HTML中的某些预期结构时会出现不一致的行为.

这是我期待的HTML:

<div id="results">
    <div class="frame">
        <div class="card">
            // here my data
        </div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

Appium我检查这三个div存在的非常简单的情况如下:

it("should display results inside the web view", function () {
    return driver
    .waitForElementByName("Address and Search")
    .sendKeys("search query")
    .sleep(1000)
    .contexts().then(function (contexts) { // get list of available views. Returns array: ["NATIVE_APP","WEBVIEW_1"]
    return driver.context(contexts[1]); // choose the webview context
    })
    .waitForElementById("results", 60000)
    .waitForElementByCss(".frame", 60000)
    .waitForElementByCss(".card", 60000)
    .sleep(3000)
});
Run Code Online (Sandbox Code Playgroud)

每次运行测试时我都得到不同的结果:有时它会找到所有元素,有时它只找到第一个元素(waitForElementById),然后无法获得任何其他元素.

这是我的配置:

exports.ios93 = {
    browserName: '',
    'appium-version': '1.4.13',
    platformName: 'iOS',
    platformVersion: '9.3',
    deviceName: 'iPhone 6',
    app: undefined // will be set later
};
Run Code Online (Sandbox Code Playgroud)

我尝试通过执行以下操作来解决问题:

切换到WEBVIEW如下后添加延迟:

.context('WEBVIEW_1')
.sleep(25000)
Run Code Online (Sandbox Code Playgroud)

更改窗口如下:

.context('WEBVIEW_1')
.windowHandles()
     .then(function(handles) {
         driver.window(handles[handles.length-1])
     })
Run Code Online (Sandbox Code Playgroud)

但这没有任何效果.

请注意,Android版本的应用程序在测试时没有遇到所有这些问题Appium.