【问题标题】:Selenium webdriver element.click() not functioning in expected manner (chrome, mocha)Selenium webdriver element.click() 未按预期方式运行(chrome、mocha)
【发布时间】:2018-01-08 20:16:33
【问题描述】:

我正在测试一个网站的登录功能,尽管我可以正确找到登录按钮,.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 && usr.password) || attempt_Error)}" ng-if="!reset_Hash && !forgotMode" class="btn btn-prim ng-scope" style=""> Log in</button>

预期行为(手动工作):

  1. 鼠标悬停时,按钮变为 color1。
  2. 点击后,按钮变为 color2。
  3. 假设电子邮件和密码正确,发布后转到主页。

我在执行时看到的:

  1. 按钮变为 color2。
  2. 什么都没有发生。
  3. 窗口保持打开状态,但如果我尝试手动单击按钮,则没有任何反应。

我在我的 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",

【问题讨论】:

  • 您同时使用 sendKeys 并单击同一元素? driver.findElement(By.xpath("//button[@type='submit']")).sendKeys(webdriver.Key.ENTER); driver.findElement(By.xpath("//button[@type='submit']")).click();
  • 我都试过了,都没有成功。我读到sendKeys(ENTER) 也可以用来模拟点击。但是,是的,这些方法都不起作用,我分别尝试了它们。
  • 你能发布正在测试的页面的html吗?听起来您已成功找到该元素,然后单击它,如果它更改为 color2。你只是没有被重定向?
  • 不仅我没有被重定向,登录功能甚至都没有发生。如果它确实让我登录,那么即使我没有被重定向,只需刷新页面就会将我带到主屏幕。这是周围的表格html:<form name="form" ng-submit="forgotMode?forgotPass(form):(resetHash?resetPass(form):login(form))" novalidate="novalidate" autocomplete="off" class="ng-valid ng-dirty">
  • 当您手动输入密码并立即按回车键登录时,文本光标仍在表单中会发生什么?

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


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 2019-05-08
    • 2014-07-12
    • 1970-01-01
    相关资源
    最近更新 更多