2017-08-04 44 views
1

我越来越:无法使用查找元素量角器/茉莉,可能是因为sendKey错误

失败:没有找到元素使用定位器

不管我怎么编程定位器(I”已经通过css,由xpath,通过ID ..没有)尝试。

我使用的网页:https://phptravels.org/clientarea.php?incorrect=true

我应该能够进入一个不正确的用户名和密码后收到一条错误消息。错误消息存储在CSS选择器.alert.alert-danger.text-center中。显示的错误是'登录详细信息不正确。请再试一次。'

无论我如何格式化,我得到相同的元素找不到问题,但也调用sendKeys时,它似乎工作。也就是说,如果我将错误消息的代码行取出来,程序的其余部分不会发生错误,因此sendKeys应该可以正常工作,但是在运行程序时,我没有注意到实际上正在输入的任何内容输入框(除非它输入sendKey信息,并且如此快地点击按钮我看不到它?但是为什么程序的其余部分不是很快?)。所以我不确定这是否是一个未找到的元素或sendKey错误。另外,我在这里查看了几个答案,并且有几个Wait类型的库,但是当我尝试在我的程序中使用这些信息时,我只是得到更多的错误。

这里是我的代码:

// newSpec.js 

browser.waitForAngularEnabled(false); 

describe('Protractor Demo App', function() { 
it('should have a title', function() { 
browser.get('http://phptravels.com/demo'); 

expect(browser.getTitle()).toEqual('PHPTRAVELS | Demo'); 
}); 
}); 

describe('Login function', function() { 
it('should be able to login', function() { 
browser.findElement(by.linkText('Login')).click(); 
expect(element(by.xpath('//div[@class="login"]')).isPresent()); 

}); 
}); 



describe('Enter name', function() { 
var inputEmail = element(by.css('#inputEmail')); 
var inputPassword = element(by.css('#inputPassword')); 
var goButton = element(by.css('#login')); 

it('should be able to enter user name', function() { 
browser.get('https://phptravels.org/clientarea.php'); 

    inputEmail.sendKeys('Test Test'); 
    inputPassword.sendKeys('Password123'); 


    browser.sleep(500); 
goButton.click(); 
    browser.sleep(500); 

var errorMessage = element(by.id('#.alert.alert-danger.text-center')); 
expect(errorMessage.getText()).toEqual(' Login Details Incorrect. Please  try again. '); 

}); 
}); 

回答

2

您正在尝试使用by.id定位器内部的CSS选择器。

使用by.css$快捷:

var errorMessage = $('.alert.alert-danger'); 

然后,您可以用Explicit Wait强制执行,以解决可能的计时问题:

var errorMessage = $('.alert.alert-danger'); 

var EC = protractor.ExpectedConditions; 
browser.wait(EC.visibilityOf(errorMessage), 5000); 

expect(errorMessage.getText()).toEqual('Login Details Incorrect. Please  try again.'); 

我也想你应该叫waitForAngularEnabled()测试中本身。这是为我工作:

describe('Enter name', function() { 
    var inputEmail = element(by.css('#inputEmail')); 
    var inputPassword = element(by.css('#inputPassword')); 
    var goButton = element(by.css('#login')); 

    it('should be able to enter user name', function() { 
     browser.waitForAngularEnabled(false); 
     browser.get('https://phptravels.org/clientarea.php'); 

     inputEmail.sendKeys('[email protected]'); 
     inputPassword.sendKeys('Password123'); 

     browser.sleep(500); 
     goButton.click(); 
     browser.sleep(500); 

     var errorMessage = $('.alert.alert-danger'); 
     expect(errorMessage.getText()).toEqual('Login Details Incorrect. Please try again.'); 

    }); 
}); 

关于“按ID”定位问题的说明:

注意,(无耻的自我推销),你有可能会陷入很多这个问题如果您以前使用过ESLint静态代码分析工具和eslint-plugin-protractor plugin - valid-by-id rule会检查传递给by.idid的有效性。

+0

对不起,我编辑了我的文件很多次,我编辑它错误地把它放在这里。我将它改回.css,仍是同样的问题。我会检查出ESLint,虽然 –

+0

@JuliePixie好吧,没问题,我添加了更多的东西来尝试。谢谢。 – alecxe

+0

现在我得到超时错误(我调整了超时值上下,没有结果)。结合缺少没有元素发现错误PLUS超时错误导致我相信它是sendKeys是罪魁祸首,特别是当我调整超时时间更长,我仍然看不到键输入。但是,当它看起来像这样简单的事情时,为什么不派遣键盘工作? –