javascript - Selenium webdriver element.click() 未按预期方式运行(chrome、mocha)

标签 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. 鼠标悬停时,按钮会更改为颜色 1。
  2. 单击后,按钮将更改为 color2。
  3. 假设电子邮件地址和密码正确,发布后即可转到主页。

执行后我看到的内容:

  1. 按钮更改为颜色2。
  2. 什么也没发生。
  3. 窗口保持打开状态,但如果我尝试手动单击按钮,则不会发生任何情况。

我在我的 js 代码中标记了方法 1-3,但它们都没有给出预期的行为。我已经分别和结合地尝试了它们。我已经尝试过执行此操作后尝试进入主页,但我确实没有登录。

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

编辑:我知道正在调用登录(表单),因为我有控制台日志。不过,这里有一些有趣的事情:控制台中出现“无法加载资源:服务器响应状态为 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",

最佳答案

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

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

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

虽然我不知道为什么,但就是这样。

关于javascript - Selenium webdriver element.click() 未按预期方式运行(chrome、mocha),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45446703/

相关文章:

javascript - 如何在 chrome 和 firefox 上设置表格高度

c# - Selenium Webdriver - 如何为 Firefox 设置代理到 "auto-detect"

ruby - 使用 Selenium Webdriver 切换窗口时出错

java - 如何在任何类中的任何测试之前和之后运行一组代码?

c# - 起订量 应用变量

node.js - 用 Jest 模拟 new Function()

python - 我如何在普通浏览器中使用 selenium

javascript - 从 Angular Firestore 过滤 Observable

javascript - 处理 Angular 2 中动态创建的组件的 @Input 和 @Output

javascript - AngularJS:从自定义标签获取属性值