【问题标题】:Automate Ember.js application using Selenium when object properties are changed at run-time在运行时更改对象属性时使用 Selenium 自动化 Ember.js 应用程序
【发布时间】:2016-08-29 20:06:15
【问题描述】:

我正在尝试使用 Selenium+TestNg 自动化 Ember.js 应用程序。

应用程序中的下拉菜单只有一个对象属性 id。但是,每次我刷新页面 id 都会发生变化并且没有模式。 例如:我第一次打开页面 id=ember1398,当我刷新页面时,相同的对象 id 更改为 ember1097。

如果有人能指导我克服这一挑战,我将不胜感激。如有必要,我愿意更改工具/框架。

【问题讨论】:

  • 你不能使用 xpath 来定位元素吗?
  • 仅显示 id 属性,并且在运行时也会发生变化,并且由于没有创建 xpath 的更改模式是不可能的
  • 能把代码大纲发一下吗...?
  • 你有想过这个吗?

标签: java selenium ember.js webdriverwait expected-condition


【解决方案1】:

由于所需的元素是 EmberJS 启用的元素,所以一些属性,例如id 将动态生成。例如,ember371ember382ember393 等。在这些情况下,您将无法使用 id 属性的完整值来定位元素。例如,考虑以下元素:

<input placeholder="" id="ember32" class="ssRegistrationField ssEmailTextboxField ember-text-field ember-view" type="email">

id 属性的值会在您每次访问AUT(Application Under Test) 时动态变化。因此,要定位元素,解决方案是构造 dynamic Locator Strategies inconjunction WebDriverWait ExpectedConditions as visibilityOfElementLocated(),如下所示:

  • cssSelector:

    WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input.ssRegistrationField.ssEmailTextboxField.ember-text-field.ember-view[id^='ember']")));
    
  • xpath:

    WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//input[starts-with(@id, 'ember') and @class='ssRegistrationField ssEmailTextboxField ember-text-field ember-view']")));
    

【讨论】:

    【解决方案2】:

    这是 Ember 的一个已知问题。我们与许多第三方应用程序合作以与它们集成,因此我们使用 selenium 进行了大量自动化测试,当他们使用 ember 时,我们遇到了这个问题,这意味着我们无法像与其他合作伙伴一样测试代码。我确信使用 Ember 有充分的理由,但能够使用 Selenium 轻松测试它并不是其中之一。在 ember 中打开了一个错误,但它被关闭了。

    https://github.com/emberjs/ember.js/issues/11834

    在 ember 修复此问题之前,我的建议是使用不同的 JS 框架,该框架旨在供第三方使用 JS 和/或框架本身之外的东西进行测试。

    【讨论】:

      猜你喜欢
      • 2020-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多