我已经在Protractor中编写了测试,并且我使用了期望声明:
loginPage.email.sendKeys( params.login.email );
expect(loginPage.email.getText()).toEqual( params.login.email );
但是,我的测试失败了,因为signUpPage.email.getText()返回一个空字符串。我无法在Selenium的文档中找到要调用哪些函数来输入正确的值?
在我的Protractor.conf文件中:
params: {
login: {
email: 'user@email.com',
password: 'blahblah123'
}
终端错误:
预期''等于' user@email.com'。
所以我试图匹配电子邮件字段的输入与我发送的电子邮件地址相同。有关如何在Selenium中做到这一点的任何建议吗?
答案 0 :(得分:3)
如果这是input
字段,则需要获取 value
属性的值:
expect(loginPage.email.getAttribute("value")).toEqual(params.login.email);
同样,要在此处应用Saifur的想法,如果您需要等待元素包含所需的值,请使用textToBePresentInElementValue
Expected Condition:
var EC = protractor.ExpectedConditions;
browser.wait(EC.textToBePresentInElementValue(loginPage.email, params.login.email), 5000);
请注意,必须指定超时值(以ms为单位)。
答案 1 :(得分:1)
可能元素加载时间是这里的问题。在这种情况下,您可以使用ExpectedCondition甚至匹配您要查找的文本。
var EC = protractor.ExpectedConditions;
browser.wait(EC.textToBePresentInElement(loginPage.email ,params.login.email));
<强>更新强> 错过了预期状况的时间。谢谢@alecxe
browser.wait(EC.textToBePresentInElementValue(loginPage.email, params.login.email), 5000);
答案 2 :(得分:1)
如果您想仅使用WebDriver实例获取AngularJS管理的输入字段的值,则可以通过一种简单的方法实现该目标。
我使用FirefoxWebDriver进行了测试,效果非常好。
基本上你必须使用JavascriptExecutor在浏览器中执行javascript代码。
如果您的Web项目有jQuery插件,那么您可以使用以下方法:
WebDriver driver = DriverFactory.getDriver();
public String getTextAt(String cssId) {
if (driver instanceof JavascriptExecutor) {
JavascriptExecutor javascriptExecutor = (JavascriptExecutor) driver;
return (String) javascriptExecutor.executeScript("return $('" + cssId + "').val();");
}
return null;
}
如果您想使用原始javascript,可以这样做:
WebDriver driver = DriverFactory.getDriver();
public String getTextAt(String cssId) {
if (driver instanceof JavascriptExecutor) {
JavascriptExecutor javascriptExecutor = (JavascriptExecutor) driver;
return (String) javascriptExecutor.executeScript("return documenet.getElementById('" + cssId + "').value;");
}
return null;
}
请注意,在这种情况下,cssId应该是一个id属性。