我在使用PhantomJS作为浏览器的选择时尝试单击按钮,我收到很多错误。
首次尝试,直接点击按钮:
var button = $('#protractorTest');
button.click();
返回错误:
Element is not currently visible and may not be manipulated
尝试调整phantomJS视口的大小似乎没有任何效果。该按钮位于屏幕的左上角,但不知何故出于(如果我没记错的话)默认的400x300视口。
browser.manage().window().setSize(1920, 1080);
我似乎无法在任何时间记录窗口大小,我能得到的最接近的是未记录的未完成承诺。所以,我不确定屏幕尺寸是否会发生变化。
通过搜索许多其他问题,我尝试了各种执行脚本,不同的方法来选择元素到目前为止没有成功。
尝试运行一个执行脚本来点击它,我遇到的问题是undefined不是一个函数:
var hiddenElement = browser.findElement(by.id('protractorTest'));
browser.executeScript("arguments[0].click()", hiddenElement).then(function() {
expect(true).toMatch(true);
});
返回此错误:
Failed: {"errorMessage":"'undefined' is not a function (evaluating 'arguments[0].click()')","request":{"headers":{"Accept-Encoding":"gzip,deflate","Connection":"Keep-Alive","Content-Length":"75","Content-Type":"application/json; charset=utf-8","Host":"localhost:42837","User-Agent":"Apache-HttpClient/4.3.6 (java 1.5)"},"httpVersion":"1.1","method":"POST","post":"{\"script\":\"arguments[0].click()\",\"args\":[{\"ELEMENT\":\":wdc:1441214073816\"}]}","url":"/execute","urlParsed":{"anchor":"","query":"","file":"execute","directory":"/","path":"/execute","relative":"/execute","port":"","host":"","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/execute","queryKey":{},"chunks":["execute"]},"urlOriginal":"/session/0fa194a0-5196-11e5-a5f1-99fee78af55e/execute"}}
Build info: version: '2.45.0', revision: '5017cb8', time: '2015-02-26 23:59:50'
System info: host: 'DS5539', ip: '10.4.4.65', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_40'
Driver info: driver.version: unknown
尝试使用webElement选择器运行测试会返回与上面相同的错误:
var hiddenElement = element(by.id('protractorTest')).getWebElement();
browser.executeScript("arguments[0].click()", hiddenElement).then(function() {
expect(successPage.isDisplayed).toBeTruthy();
});
尝试使用量角器选择运行测试会产生不同的错误:
var hiddenElement = $('#protractorTest');
browser.executeScript("arguments[0].click()", hiddenElement).then(function() {
expect(successPage.isDisplayed).toBeTruthy();
});
Maximum call stack size exceeded
有没有办法使用phantomJS和量角器点击一个按钮?
答案 0 :(得分:4)
首先,如果您选择PhantomJS作为目标浏览器,我打赌您会在最近的将来回到SO并遇到新问题。甚至是protractor
个开发人员recommend against it:
我们建议不要使用PhantomJS进行Protractor测试。那里 有很多报道的PhantomJS崩溃和行为问题 与真正的浏览器不同。
另外,如果您正在进行测试,那么您应该让测试环境尽可能接近最终用户的环境 - 您是否使用PhantomJS
看过应用程序的用户? - 可能不是。
如果你因为没有真正的显示器而无法接收PhantomJS
,那么你也可以在无头模式下运行firefox或chrome,请参阅:
另外,请阅读这篇@Louis's answer - 关于无头与头脑的精彩文章。
或者,您可以在BrowserStack
or Sauce Labs
or similar services使用远程selenium服务器。
您采取的最新方法存在问题 - 应该调用isDisplayed
:
var hiddenElement = $('#protractorTest');
browser.executeScript("arguments[0].click()", hiddenElement).then(function() {
expect(successPage.isDisplayed()).toBeTruthy();
// HERE^
});
或者/或者,您可以使用scrollIntoView()
滚动查看元素:
var button = $('#protractorTest');
browser.executeScript("arguments[0].scrollIntoView();", button.getWebElement()).then(function () {
button.click();
});
添加explicit wait也可能有所帮助:
var EC = protractor.ExpectedConditions;
browser.wait(EC.visibilityOf(button), 5000);