雪球app,在点击交易-港美股开户进webview页面,输入不进手机号,报timeout错误

def test_hka_debug(self):
    self.driver.find_element(MobileBy.XPATH,"//*[@text='交易' and contains(@resource-id,'tab')]").click()
    self.driver.find_element(MobileBy.ACCESSIBILITY_ID,"港美股开户").click()
    #WebDriverWait(self.driver,20).until(lambda x: len(self.driver.contexts)>1)
    self.driver.switch_to.context(self.driver.contexts[-1])
    print("~~~~~~~~~~~~~~~~~")
    print(self.driver.current_context)
    print(self.driver.page_source)
    WebDriverWait(self.driver,20).until(lambda x: len(self.driver.window_handles)>3)
    self.driver.switch_to.window(self.driver.window_handles[-1])
    #self.driver.find_element(By.CSS_SELECTOR,".trade_home_xueying_SJY.trade_home_info_3aI").click()
    WebDriverWait(self.driver,30).until(expected_conditions.element_to_be_clickable((By.CSS_SELECTOR,'[placeholder="请输入手机号"]')))
    self.driver.find_element(By.CSS_SELECTOR,'[placeholder="请输入手机号"]').send_keys("15811111111")
    self.driver.find_element(By.CSS_SELECTOR,'[placeholder="请输入验证码"]').send_keys("1234")
    self.driver.find_element(By.CSS_SELECTOR,'.open_form-submit_1Ms').click()

    self.driver.switch_to.context(self.driver.contexts[0]) #切回原生
    self.driver.find_element(MobileBy.ID,"action_bar_close").click()

麻烦,把Appium log的完整日志贴一下

很长,我发你微信吧?

贴到帖子里面,使用markdown的代码格式即可

log是可以贴图的,只发报错的上下文即可

appium_log.log (163.9 KB)

经过mr.dong的调试,开始看appium的log,同时用appium-doctor发现appium很多组件没有装,又重新装了appium,把python的版本从3.8降到了2.7,看了adb的log,发现adb的log没有问题,最后还是代码出了问题,改为以下代码后,跑通了。
def test_hka_debug(self):
self.driver.find_element(By.XPATH, ‘//*[@text=“交易” and contains(@resource-id, “tab_name”)]’).click()
self.driver.switch_to.context(self.driver.contexts[-1])
self.driver.find_element(By.CSS_SELECTOR, “.trade_home_xueying_SJY”).click()
WebDriverWait(self.driver, 30).until(lambda x: len(self.driver.window_handles) > 3)
self.driver.switch_to.window(self.driver.window_handles[-1])
WebDriverWait(self.driver,30).until(expected_conditions.element_to_be_clickable((By.CSS_SELECTOR,’[placeholder=“请输入手机号”]’)))
self.driver.find_element(By.CSS_SELECTOR,’[placeholder=“请输入手机号”]’).send_keys(“15811111111”)
self.driver.find_element(By.CSS_SELECTOR,’[placeholder=“请输入验证码”]’).send_keys(“1234”)
self.driver.find_element(By.CSS_SELECTOR,’.open_form-submit_1Ms’).click()

    self.driver.switch_to.context(self.driver.contexts[0]) #切回原生
    self.driver.find_element(MobileBy.ID,"action_bar_close").click()

输入手机号这里有3个坑:

  1. 等待context上下文全部加载后在切换
  2. 等待window handlers全部加载后再切换
  3. 切换到最后一个window handler的时候,还需要等待输入框元素出现才能定位

他这个问题是,用原生定位点击后,再切换webview,后面的元素会找不到,这个问题挺奇怪的

切换前后分别打印source看看