在运行时更改对象属性时使用Selenium自动执行Ember.js应用程序

时间:2016-05-04 11:43:29

标签: javascript java selenium ember.js testng

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

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

如果有人能指导我克服这一挑战,我会很高兴。如有必要,我愿意改变工具/框架。

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

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

每次访问 AUT(被测应用程序)时,id属性值的值将保持动态变化。因此,要定位该元素,解决方案是构造 dynamic Locator Strategies并与WebDriverWait作为visibilityOfElementLocated()的{​​{3}}并用。如下:

  • 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']")));