我正在尝试用protractorjs测试我的angularjs应用程序。我已经设置了selenium并让服务器和转轮工作。我的问题是,当我运行测试时,我得到了ElementNotVisibleError。我知道我想要选择的元素是隐藏的,直到填写了某些字段,这就是我希望保留它的方式。
我的问题是,是否通过调用等待或睡眠来解决问题。我尝试了许多等待和睡眠的变化,但没有运气。
我的测试代码是
it('navigates the user to the login page', function(){
ptor = protractor.getInstance();
ptor.get('http://localhost:2222/#/page');
ptor.findElement(protractor.By.input('input.type1')).sendKeys('one');
ptor.findElement(protractor.By.input('input.type2')).sendKeys('two');
ptor.findElement(protractor.By.input('input.type3')).sendKeys('three');
ptor.findElement(protractor.By.input('input.type4')).sendKeys('four');
ptor.findElement(protractor.By.input('input.type5')).sendKeys('five');
ptor.findElement(protractor.By.input('input.type6')).sendKeys('six');
ptor.sleep(5000);
ptor.findElement(protractor.By.id('clickableBtn')).click();//not visible until above fields populated
}, 1000000);
量角器的消息是
Message:
ElementNotVisibleError: element not visible
答案 0 :(得分:2)
如果在所有字段中输入之前元素不可见,那是因为Javascript。输入最后一个字段后,您可能需要输入Tab
或Enter
来启动该Javascript:
ptor.findElement(protractor.By.input('input.type6')).sendKeys(Keys.Tab);
答案 1 :(得分:2)
使用javascript我可以点击
var linkToClick = ptor.driver.findElement(protractor.By.id('clickableBtn'));
ptor.executeScript("arguments[0].click();", linkToClick );
答案 2 :(得分:1)
是的,WebDriver允许您直接在元素上执行javascript,所以只需执行javascript .click。您需要转换为您自己的语言,但这是我使用C#
的方式 IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
js.ExecuteScript("arguments[0].click()", element);
Browser.WaitForPageLoad(driver);
我实际上创建了一个扩展程序方法,这样我只需键入element.InvisibleClick(驱动程序)并为它点击它。有关详情,可以找到documented HERE。
答案 3 :(得分:-1)
您可以随时给它opacity:0
-moz-opacity: 0.00; opacity:.00; filter: alpha(opacity=00);
这适用于所有浏览器。