【问题标题】:Trigger react change event from appium从 appium 触发响应更改事件
【发布时间】:2018-10-12 18:36:57
【问题描述】:

我正在为一个混合应用程序构建自动化,其中登录屏幕是一个反应 Web 视图,我无法控制它。 在密码输入字段中输入内容之前,登录按钮将被禁用。 Selenium 可以输入密码,但 react 无法识别更改,因此它永远不会启用按钮。 我正在为 appium 使用 python 库。

这是用于输入密码的 HTML:

<input type="password" class="TextInput--textInput__271qa TextInput-mobile--textInput__jba5n PasswordInput--password__8sQc8 TextInput--hasError__2DrJ8">

对于登录按钮:

<button class="Button--strongActionButton__154DS Button--mediumButton__Ga30r SignInScreen-mobile--signInButton__adj3k" type="submit" disabled="">Sign In</button>

这就是我将文本发送到密码输入字段并单击登录按钮的方式:

self.driver.switch_to.context(self.driver.contexts[-1])
self.driver.find_element_by_xpath("//input[@type='password']").send_keys("test_user@gmail.com")
self.driver.find_element_by_xpath("//button[@type='submit']").click()

最后一个动作是成功的,但是由于按钮被禁用所以它没有做任何事情。

我尝试过从 appium 触发 JS 事件,但没有成功。我也尝试过通过 JS 启用按钮,但仍然没有检测到输入的值。

感谢任何帮助,谢谢!

【问题讨论】:

  • 使用相关的 HTML 和您的代码试验更新问题
  • @DebanjanB 刚刚更新,谢谢!
  • 有点小技巧,但你可以尝试使用后台应用程序: self.driver.background_app(10) 并使用 self.driver.execute('mobile: activateApp', { bundleId : 'bundleid' }) 看看它是否更新?

标签: reactjs selenium selenium-webdriver webdriver appium


【解决方案1】:

正如您所提到的,在密码输入字段中输入内容之前,登录按钮被禁用,所以一旦您在 密码中发送密码文本 字段,您需要等待 Sign-in 按钮 可点击 诱导 WebDriverWait 如下:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC      

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@type='submit']"))).click()

【讨论】:

  • 感谢您的建议,我实际上是在等待元素变为可点击但从未发生过,因为 react 没有识别出输入值发生了变化
  • @eduardoreynoso 这不是评论,而是经过充分研究的答案。你如何总结react doesn't identify that there is a change in the input value
  • 我的结论是因为React自己处理事件来触发页面的变化。他们甚至有一个测试实用程序框架reactjs.org/docs/test-utils.html 来帮助模拟事件。在我的网络视图中,我看到启用按钮的触发器是在输入发生变化时。 Selenium 确实发送了键,但反应中的输入值不会改变值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-26
  • 2013-05-26
相关资源
最近更新 更多