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

3zwtqj6y  于 2022-11-05  发布在  其他
关注(0)|答案(2)|浏览(95)

我正在尝试使用Selenium+TestNg自动化Ember.js应用程序。
应用程序中的下拉列表只有一个对象属性ID。但是,每次刷新时,页面ID都会发生变化,并且没有模式。例如:我第一次打开id= ember 1398的页面,当我刷新页面时,同一对象id更改为ember 1097。
如果有人能指导我克服这个挑战,我将非常高兴。如果有必要,我愿意改变工具/框架。

flmtquvp

flmtquvp1#

这是Ember的一个已知问题。我们与许多第三方应用程序一起工作,以便与它们集成,因此我们使用 selenium 进行了许多自动化测试,当他们使用ember时,我们遇到了这个问题,这意味着我们不能像其他合作伙伴一样测试代码。我相信使用Ember有很好的理由,但使用Selenium能够轻松测试它不是其中之一。在ember中打开了一个bug,但它被关闭了。
https://github.com/emberjs/ember.js/issues/11834
在ember修复这个问题之前,我的建议是使用一个不同的JS框架,这个框架是为了让第三方使用JS和/或框架本身之外的东西来测试而构建的。

5t7ly7z5

5t7ly7z52#

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

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

id属性的值将在每次访问 AUT(待测应用程序) 时动态更改。因此,要定位该元素,解决方案是构建动态定位器策略,将WebDriverWaitExpectedConditions一起归纳为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']")));

相关问题