javascript - Selenium - 单击按钮直到出现某些元素

标签 javascript node.js selenium selenium-webdriver mocha.js

我正在尝试单击 Yopmail's websiteCheck for new emails 按钮直到收到一封电子邮件(因为一开始收件箱是空的)。

我正在使用 SeleniumNodeJS 实现,使用 Mocha 运行我的测试。这是我尝试点击直到元素出现的方式:

driver.get('http://yopmail.com');
driver.wait(until.elementLocated(By.css('#f .sbut')));
driver.findElement(By.name('login')).sendKeys(name);
driver.findElement(By.css('#f .sbut')).sendKeys(Key.ENTER);
driver.wait(until.elementLocated(By.id('ifinbox')));// Switching iframe
driver.switchTo().frame("ifinbox");


bool = driver.isElementPresent("m1");


while (!bool) {
  driver.switchTo().defaultContent();
  driver.findElement(By.id("lrefr")).click();
  driver.sleep(500);// 500ms
  driver.switchTo().frame("ifinbox");
  bool = driver.isElementPresent("m1");
}

ligne bool = driver.isElementPresent("m1"); 失败并显示以下不明确的错误消息:

    Error: the error {} was thrown, throw an Error :)
        at Array.forEach (native)

我想我不能在 promise 上构建一个 while 循环……也许……但是我真的不明白为什么它会失败,以及如何正确地编写这个 while 循环。

欢迎提出任何建议!

最佳答案

根据source code , isElementPresent() 接受定位器或元素,但您传入的是字符串 m1。假设这是一个 id:

bool = driver.isElementPresent(By.id("m1"));

关于javascript - Selenium - 单击按钮直到出现某些元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32503848/

相关文章:

javascript - sequelize.transaction() 可以将异步函数作为回调吗?

java - Selenium webdriver Java 代码使用 web 驱动程序双击网格中的记录

javascript - Angular 根据另一个输入更改验证输入

javascript - Ionic 3 - 根据鼠标/触摸位置, Canvas 绘制并不完美

javascript - 如何使用 GraphQL 处理 long Int?

javascript - 在模块化 Node 应用程序中创建多个 Mongoose DB

css - 使用 capybara 检查 CSS 是否已更新

java - 带有 java @FindBy 注释的 selenium 无法解析为类型

javascript - 在客户端 javascript 文件中使用 JSON 数据

javascript - jQuery 选择器 - 匹配元素的内容