【发布时间】:2017-08-23 16:42:58
【问题描述】:
我有一个奇怪的问题,周一通过的测试现在失败了。我不断收到与未找到元素有关的相同错误:
Error: An element could not be located on the page using the given search parameters.
at element(".component-search__cta") - click.js:12:17
at click(".component-search__cta") - errorHandler.js:112:39
问题是,该元素肯定是由我的页面对象中的代码定位和点击的。然后浏览器重定向到一个新页面(如预期的那样),但测试会抛出这个虚假错误。
代码再简单不过了:
const Page = require('../../common/page_objects/page');
const expect = require('chai').expect;
class HomePage extends Page {
static get elements() {
return {
searchBox: browser.element('.component-search__text'),
searchButton: browser.element('.component-search__cta')
};
}
static search(query){
this.elements.searchBox.waitForVisible();
this.elements.searchBox.setValue(query);
this.elements.searchButton.click();
}
}
this.When(/^I submit a search query "([^"]*)"$/, function(query) {
HomePage.search(query);
});
如果我注释掉searchButton.click(); 我不会再收到错误消息,但测试将失败,因为不再单击搜索按钮!
【问题讨论】:
-
如果丢弃明显原因(没有元素,需要等待元素):可能是页面上的多个元素('.component-search__cta')?
-
该定位器仅返回 Chrome 控制台中的一个元素。虽然更好的定位器是
button.component-search__cta;改变它并没有解决我的问题。我也尝试了waitForVisible方法,但是这个问题的奇怪之处在于我每次都能看到按钮被点击。
标签: javascript selenium-webdriver selenium-chromedriver webdriver-io