Appium [求助] Hybrid App 里 Webview 的元素 click 无效

和曦 · February 25, 2016 · Last by 扫地僧 replied at February 27, 2016 · 1499 hits

环境:Win7-32bit,Appium-server (1.4.16),ruby_lib (8.0.0),appium_console (1.0.4)

最近在尝试用Appium做Hybrid App的自动化测试,原生部分没有什么问题,
但是切入Webview后,里面的元素操作后却没有效果,不知道什么原因。

下面是Debug过程,

切换到Webview里面后,可以定位到元素,但是click元素却报“元素不可见错误”。
部分Appium-server端的log如下:

2016-02-25 08:58:31:290 - info: --> POST /wd/hub/session/68723b72-563c-46dd-9d1f-780d920a1d14/element {"using":"css selector","value":"ul > li img"}
2016-02-25 08:58:31:294 - info: JSONWP Proxy: Proxying [POST /wd/hub/session/68723b72-563c-46dd-9d1f-780d920a1d14/element] to [POST http://127.0.0.1:9515/wd/hub/session/4eafd2de161edb0bf40555388533ae35/element] with body: {"using":"css selector","value":"ul > li img"}
2016-02-25 08:58:31:460 - info: JSONWP Proxy: Got response with status 200: {"sessionId":"4eafd2de161edb0bf40555388533ae35","status":0,"value":{"ELEMENT":"0.9846464938018471-1"}}
2016-02-25 08:58:31:462 - info: JSONWP Proxy: Replacing sessionId 4eafd2de161edb0bf40555388533ae35 with 68723b72-563c-46dd-9d1f-780d920a1d14
2016-02-25 08:58:31:471 - info: <-- POST /wd/hub/session/68723b72-563c-46dd-9d1f-780d920a1d14/element 200 177.920 ms - 106
2016-02-25 08:58:42:400 - info: --> POST /wd/hub/session/68723b72-563c-46dd-9d1f-780d920a1d14/element/0.9846464938018471-1/click {}
2016-02-25 08:58:42:403 - info: JSONWP Proxy: Proxying [POST /wd/hub/session/68723b72-563c-46dd-9d1f-780d920a1d14/element/0.9846464938018471-1/click] to [POST http://127.0.0.1:9515/wd/hub/session/4eafd2de161edb0bf40555388533ae35/element/0.9846464938018471-1/click] with body: {}
2016-02-25 08:58:42:512 - info: JSONWP Proxy: Got response with status 200: {"sessionId":"4eafd2de161edb0bf40555388533ae35","status":11,"value":{"message":"element not visible\n (Session info: webview=33.0.0.0)\n (Driver info: chromedriver=2.21.371459 (36d3d07f660ff2bc1b...

html的源码如下,似乎并没有设置元素属性是隐藏。

<div class="ul-container">
<ul id="
targetUl" sort>
<li ng-repeat="
m in infoA">
<div class="
device_item"><img src={{m.path}} ng-mouseup="kedup($index)" ng-mousedown="kedown($index)" name="devicesImg" />
<!-- ng-mouseup="
kedup($index)" ng-mousedown="kedown($index)"-->
<div class="
shade" style="display: none"></div>
</div>
<p>{{m.name}}</p>
</li>
<li>
<div ng-click="
bindDevice()"><img src="../img/add.PNG" />
</div>
<p>
添加设备
</p>
</li>
</ul>
</div>

此外,在调试过程中,还遇到的问题就是:available_contexts有时能获取到Webview,有时却不能。(环境都一样)
各种Google以后,并没有找到类似问题。
有哪位朋友遇到过吗?

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 7 条回复 时间 点赞

click元素却报“元素不可见错误”。

做下时间等待

available_contexts有时能获取到Webview

不稳定

#1楼 @lihuazhang
我脚本里其实已经做了sleep延时等待,但是结果依旧。

而如果用wait.until { find_element(:css, 'ul > li img').displayed? },
结果则是等待30s后超时,元素仍旧没有displayed。

#2楼 @laiyuncong8404 angular 的 dom 感觉有可能真的把这个元素的属性给干掉了。。

#3楼 @lihuazhang
我最初也是这么怀疑的,因为
增加显示属性后,Debug图片的size显示是0,无解了

<li>
<div ng-click="bindDevice()" style="display: block"><img src="../img/add.PNG" />
</div>
<p>
添加设备
</p>
</li>
[7] pry(main)> addBtn = find_element(:css, 'ul > li img')
#<Selenium::WebDriver::Element:0x..f81060ccc id="0.47901470004580915-1">
[8] pry(main)> addBtn.displayed?
false
[9] pry(main)> addBtn.size
{
:width => 0,
:height => 0
}

execute_script或者ActionBuilder点会怎么样?

我也正考虑用js来搞了,没招了

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up