Appium iOS webview 内容无法打印出来。

johnfad · 2015年04月27日 · 最后由 Dorom 回复于 2019年09月27日 · 2472 次阅读

我的问题:

  1. 为什么我执行一次 driver.switch_to.context(aa[1]),打印出 driver.contexts 都会变呢,貌似每次都会加 1,例如之前是 [u'NATIVE_APP', u'WEBVIEW_1', u'WEBVIEW_2', u'WEBVIEW_3’],执行一次就会变成 [u'NATIVE_APP', u'WEBVIEW_4’, u'WEBVIEW_5’, u'WEBVIEW_6’]。
  2. print driver.current_url 出来的为什么是 about:blank?
  3. print driver.page_source 是为什么是?

代码:



driver.find_element_by_name("浏览").click()
time.sleep(3)
print driver.contexts
bb = driver.contexts
print bb
driver.switch_to.context(bb[1])
print driver.page_source
print driver.current_url

appium log 信息:


info: --> GET /wd/hub/session/e1e671d2-e5f4-4882-9455-35f859c95ca7/contexts {}

info: [debug] [REMOTE] Getting WebKitRemoteDebugger pageArray

info: [debug] Responding to client with success: {"status":0,"value":["NATIVE_APP","WEBVIEW_1","WEBVIEW_2","WEBVIEW_3"],"sessionId":"e1e671d2-e5f4-4882-9455-35f859c95ca7"}
info: <-- GET /wd/hub/session/e1e671d2-e5f4-4882-9455-35f859c95ca7/contexts 200 7.031 ms - 122 {"status":0,"value":["NATIVE_APP","WEBVIEW_1","WEBVIEW_2","WEBVIEW_3"],"sessionId":"e1e671d2-e5f4-4882-9455-35f859c95ca7"}
info: --> GET /wd/hub/session/e1e671d2-e5f4-4882-9455-35f859c95ca7/contexts {}
info: [debug] [REMOTE] Getting WebKitRemoteDebugger pageArray
info: [debug] Responding to client with success: {"status":0,"value":["NATIVE_APP","WEBVIEW_1","WEBVIEW_2","WEBVIEW_3"],"sessionId":"e1e671d2-e5f4-4882-9455-35f859c95ca7"}
info: <-- GET /wd/hub/session/e1e671d2-e5f4-4882-9455-35f859c95ca7/contexts 200 2.400 ms - 122 {"status":0,"value":["NATIVE_APP","WEBVIEW_1","WEBVIEW_2","WEBVIEW_3"],"sessionId":"e1e671d2-e5f4-4882-9455-35f859c95ca7"}
info: --> POST /wd/hub/session/e1e671d2-e5f4-4882-9455-35f859c95ca7/context {"sessionId":"e1e671d2-e5f4-4882-9455-35f859c95ca7","name":"WEBVIEW_1"}
info: [debug] Attempting to set context to 'WEBVIEW_1'
info: [debug] [REMOTE] Debugger web socket connected to url [ws://localhost:27753/devtools/page/1]
info: [debug] Responding to client with success: {"status":0,"value":"WEBVIEW_1","sessionId":"e1e671d2-e5f4-4882-9455-35f859c95ca7"}
info: <-- POST /wd/hub/session/e1e671d2-e5f4-4882-9455-35f859c95ca7/context 200 4.614 ms - 83 {"status":0,"value":"WEBVIEW_1","sessionId":"e1e671d2-e5f4-4882-9455-35f859c95ca7"}

info: --> GET /wd/hub/session/e1e671d2-e5f4-4882-9455-35f859c95ca7/source {}
info: [debug] [REMOTE] Sending javascript command
info: [debug] [REMOTE] Remote debugger data sent [{"method":"Runtime.evaluate","params":{"objectGroup":"console","includeCommandLineAPI":true,"doNotPauseOnExceptionsAndMuteConsole":true,"expression":"document.getElementsByTagName(\"html\")[0].outerHT...]

Debugger web socket received data :  {"result":{"result":{"type":"string","value":"\u003Chtml\u003E\u003Chead\u003E\u003C/head\u003E\u003Cbody\u003E\u003C/body\u003E\u003C/html\u003E"},"wasThrown":false},"id":1}

info: [debug] Responding to client with success: {"status":0,"value":"<html><head></head><body></body></html>","sessionId":"e1e671d2-e5f4-4882-9455-35f859c95ca7"}
info: <-- GET /wd/hub/session/e1e671d2-e5f4-4882-9455-35f859c95ca7/source 200 61.938 ms - 113 {"status":0,"value":"<html><head></head><body></body></html>","sessionId":"e1e671d2-e5f4-4882-9455-35f859c95ca7"}

info: --> GET /wd/hub/session/e1e671d2-e5f4-4882-9455-35f859c95ca7/url {}
info: [debug] [REMOTE] Sending javascript command
info: [debug] [REMOTE] Remote debugger data sent [{"method":"Runtime.evaluate","params":{"objectGroup":"console","includeCommandLineAPI":true,"doNotPauseOnExceptionsAndMuteConsole":true,"expression":"window.location.href","returnByValue":true},"id":2...]
Debugger web socket received data :  {"result":{"result":{"type":"string","value":"about:blank"},"wasThrown":false},"id":2}
info: [debug] Responding to client with success: {"status":0,"value":"about:blank","sessionId":"e1e671d2-e5f4-4882-9455-35f859c95ca7"}
info: <-- GET /wd/hub/session/e1e671d2-e5f4-4882-9455-35f859c95ca7/url 200 11.407 ms - 85 {"status":0,"value":"about:blank","sessionId":"e1e671d2-e5f4-4882-9455-35f859c95ca7"}

共收到 14 条回复 时间 点赞

代码请使用代码块。谢谢。
另外,请把完整脚本附到正文中。

#1 楼 @chenhengjie123 你看这样行吗?

#2 楼 @gaoxing200851 代码使用代码块就好了,不要全部都放到代码块里面。。。
例如:

代码:

driver.findElementById("abc")

建议花 1~2 分钟学习一下 markdown 语法中 单行代码代码块 部分。

同时参考一下论坛中精华帖的排版。

#3 楼 @chenhengjie123 好的,我今晚回去学习下。
对了 这个问题您明白了吗? 能先帮解答下吗?

5楼 已删除
6楼 已删除
7楼 已删除
8楼 已删除
9楼 已删除
10楼 已删除
11楼 已删除
12楼 已删除
13楼 已删除
14楼 已删除
15楼 已删除
16楼 已删除
17楼 已删除

这得看下你的 app 是怎么做的?这个问题我和恒洁之前遇到过。 在切换到 webview 之后,你还需在看看 window handlers

#18 楼 @lihuazhang 你的怎么做是什么意思呢? window handlers 我下去看看。

相比于这个问题,我更好奇为啥这边删除了一堆的回复?到底是啥样的内容呢?

#20 楼 @pighero001 你都精通 pc/android/ios 自动化呢,帮咱解答了这个问题,我给你细细道来。

#21 楼 @gaoxing200851 你需要仔细分析下当前的页面,是不是存在两个?driver.switch_to.context(aa[1]) 这个是不规整的定位,很容易定位到另外一个 webview。

#4 楼 @gaoxing200851 根据你的描述,应该是你的手机上打开了不止一个 webview ,而你 switch 到的刚好不是你在界面上看到有内容的那个。但你的情况和之前我和恒温研究的有点出入,我们那个是一个 webview 里面开了不止一个 window ,你这个是本来就有多个 webview(webview 里面是否还有多个 window 还不知道)。
看你的代码是用 python ,可以用一个循环切换所有 context ,然后把每个 webview 的 source 都打印出来,看到底哪个是你在手机界面上看到的那个。然后再做进一步操作。

#22 楼 @pighero001 因为它一直变呢,所以我才这样写的。

#23 楼 @chenhengjie123 我用你的办法试试,谢谢。

陈恒捷 回复

我目前出现的情况应该和你一样,一个 webwiew 有多个 window,getWindowHandles() 会有 3 个 window 出来,但是通过 driver.switchTo().window(window) 会报错 unknown error: cannot activate web view;

我也遇到相同的情况目前也不知道怎么解决,每次的 webview 都不一样 "WEBVIEW_1","WEBVIEW_2","WEBVIEW_3" 这样

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册