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条答案
按热度按时间flmtquvp1#
这是Ember的一个已知问题。我们与许多第三方应用程序一起工作,以便与它们集成,因此我们使用 selenium 进行了许多自动化测试,当他们使用ember时,我们遇到了这个问题,这意味着我们不能像其他合作伙伴一样测试代码。我相信使用Ember有很好的理由,但使用Selenium能够轻松测试它不是其中之一。在ember中打开了一个bug,但它被关闭了。
https://github.com/emberjs/ember.js/issues/11834
在ember修复这个问题之前,我的建议是使用一个不同的JS框架,这个框架是为了让第三方使用JS和/或框架本身之外的东西来测试而构建的。
5t7ly7z52#
由于所需的元素是启用了EmberJS的元素,因此将动态生成某些属性(例如 id)。例如,
ember371
、ember382
、ember393
等。在这些情况下,您将无法使用id
属性的完整值来定位元素。例如,请考虑以下元素:id
属性的值将在每次访问 AUT(待测应用程序) 时动态更改。因此,要定位该元素,解决方案是构建动态定位器策略,将WebDriverWait与ExpectedConditions一起归纳为visibilityOfElementLocated()
,如下所示:cssSelector
:xpath
: