Selenium webdriver element.click()无法以预期的方式运行(chrome,mocha)

时间:2017-08-01 20:01:18

标签: javascript unit-testing selenium selenium-webdriver automated-tests

我正在测试网站的登录功能,即使我可以正确找到“登录”按钮,.click()似乎也没有像我期望的那样工作。

首先,相关测试js代码:

driver.sleep(1000)
driver.findElement(By.name('email')).sendKeys(fakeEmail);
driver.findElement(By.name('password')).sendKeys(fakePassword);
driver.sleep(5000);
driver.findElement(By.xpath("//button[@type='submit']")).isEnabled()
.then(function(isEnabled) {
    console.log(isEnabled) // prints true
    var el = driver.findElement(By.name('password'));
    el.sendKeys(webdriver.Key.ENTER); //method 1
})
//note: these xpaths are correct. I am able to get inner text, for example
driver.findElement(By.xpath("//button[@type='submit']")).sendKeys(webdriver.Key.ENTER); //method 2
driver.findElement(By.xpath("//button[@type='submit']")).click(); //method 3

接下来,这是登录按钮html中的代码:

<button type="submit" ng-disabled="attempt_Error" ng-class="{'disabled': (!(usr.email &amp;&amp; usr.password) || attempt_Error)}" ng-if="!reset_Hash &amp;&amp; !forgotMode" class="btn btn-prim ng-scope" style=""> Log in</button>

预期的行为(这可以手动工作):

  1. 在鼠标悬停时,按钮更改为color1。
  2. 点击后,按钮变为color2。
  3. 假设电子邮件和密码正确,发布时请转到主页。
  4. 执行时看到的内容:

    1. 按钮更改为color2。
    2. 什么都没发生。
    3. 窗口保持打开状态,但如果我尝试手动点击按钮,则不会发生任何事情。
    4. 我在我的js代码中标记了方法1-3,但没有一个给出预期的行为。我已经单独和联合尝试了所有这些。我已经尝试过这样做后尝试去主页,但我确实没有登录。

      我的问题是:为什么element.click()不按我希望的方式行事?

      编辑:我知道正在调用login(form),因为我有一个控制台日志。这里有一些有趣的事情:在控制台中有一个“无法加载资源:服务器响应状态为403(禁止)”错误!如果我之后继续点击按钮,我会得到angular.js:8632 POST http://localhost:9000/api/session 403 (Forbidden)。如果我手动执行此操作,则不会出现该错误!知道为什么吗?

      版本:

      "chai": "^4.1.0",
      "chai-as-promised": "^7.1.1",
      "chromedriver": "^2.31.0",
      "mocha": "^3.4.2",
      "selenium-webdriver": "^3.5.0",
      

1 个答案:

答案 0 :(得分:0)

这是一个非常难看的解决方案......鉴于403错误是主要问题,我只是把

driver.get('http://localhost:9000');
driver.navigate().refresh();

在测试开始时。所以它首先导航到localhost:9000;然后它又在那里航行。然后它刷新。这解决了这个问题。

我不确定为什么,但确实如此。