【问题标题】:element not visible error for password field using protractor使用量角器的密码字段的元素不可见错误
【发布时间】:2015-12-29 06:19:42
【问题描述】:

我想在密码字段中输入一些值,但是当我找到元素并输入一些值时,它显示元素不可见错误。下面是密码字段的 html 代码。我已经通过 xpath、css、id 和 name 尝试过,即使我已经做出了等待条件,但它不起作用。

这是我试过的方法

browser.sleep(3000);
AGP.AgtPassword.sendKeys(Login.AgPassword);
var msg = AGP.pswmsg1.getText();
if(msg == Login.msg1 || Login.msg2)
{
AGP.AgtPassword.clear();
AGP.AgtPassword.sendKeys(Login.Ag1Password);
}

<input type="password" id="password" name="agtPassword" class="form-control text-input ng-pristine ng-invalid ng-invalid-required ng-valid-pattern ng-valid-minlength ng-valid-maxlength ng-touched" ng-model="agentPassPhrase" ng-minlength="6" ng-maxlength="20" ng-pattern="/(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z])/" placeholder="Password" required="" style="">

【问题讨论】:

  • 您需要弄清楚为什么该字段被报告为不可见。按 id 查找是引用元素的最佳方式。话虽如此,如果您有多个具有该 id 值的字段,那您就错了。根据 W3C 规范,每个页面只能有一个具有特定 id 值的元素。

标签: angularjs automation protractor


【解决方案1】:

这是一种猜测,但造成此类问题的原因之一是有多个元素与您的定位器匹配,而您使用的是不可见的元素,而不是您实际想要发送密钥的元素。在这种情况下,您需要改进定位器。例如,不要这样做:

element(by.id("password"));

您可能需要让它在特定元素内搜索密码字段,例如:

element(by.css("form#myform password")); 

请注意,ids 只应该在整个页面中是唯一的,但情况并非总是如此。

【讨论】:

  • 对不起,我不同意。按 id 查找是查找元素的最准确的方法。如果他在页面上有两个具有相同 id 的元素,则需要更改其中一个。根据 W3C 规范,每页只能有一个 id 值。
  • @MBielski 当然,W3C 有它的规则。在实践中,我已经看到了多个例子,它发生了。通常,当页面上有两个具有相似或相同控件的表单并且其中一个表单被隐藏时,就会发生这种情况。换句话说,这不是一个疯狂的猜测,而是一个有根据的猜测。
  • 那么我怎样才能发现特定元素正在用于另一个字段。
  • @Lokesh 您可以使用浏览器开发工具手动检查,也可以运行element.all(by.id("password")).count().then(function (count) { console.log(count) });
  • 谢谢 alecxe 会检查这个
【解决方案2】:

我是如何通过下面的代码解决这个问题的。

this.AgtPassword = element.all(by.css(data.AgentPassword)).get(2);

【讨论】:

    猜你喜欢
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多