element(by.css('#topic_0')).click();
当我在开发环境中时,我可以很好地与它交互,但当我切换到测试环境时与它交互时,我会收到这个错误。Failed: element click intercepted element id="topic_0" is not clickable at point (x,x). other element would receive the click id="topics_table"
这就是我登录测试环境的方式
browser.waitForAngularEnabled(false);
browser.get(browser.baseUrl);
browser.sleep(10000);
browser.findElement(by.id('userID')).sendKeys(browser.params.login.user);
browser.findElement(by.id('password')).sendKeys(browser.params.login.password);
browser.findElement(by.name('submitButton')).click();
browser.waitForAngularEnabled(true);
错误Failed: element click intercepted element id="topic_0" is not clickable at point (x,x). other element would receive the click id="topics_table"
通常发生在量角器无法定位目标元素时(在您的情况下,您的目标元素具有#topic_0
css;来自上面的代码element(by.css('#topic_0'))
(。。。
当你不处理承诺时,Protractor大多无法定位元素。我假设您尝试单击的元素在DOM上还不可用,而量角器正在单击另一个元素。。。这个问题与环境无关。在您的情况下,测试环境可能只是比开发环境慢,这就是为什么它在开发环境中工作,而在测试环境中不工作。
我想说使用其中一个expectedConditions,即expectedConditions的可见性,这样您的代码最终会等待元素显示在DOM上。。。所以你的代码如下:
var EC = protractor.ExpectedConditions;
// Waits for the element with id 'topic_0' to be visible on the dom.
browser.wait(EC.visibilityOf($('#topic_0')), 5000);
element(by.css('#topic_0')).click();
注意,当使用CSS Selectors作为定位器时,可以使用快捷方式$((表示法:
$('my-css');
// Is the same as:
element(by.css('my-css'));