Javascript selenium等到onMouseDown监听器设置为

时间:2017-07-27 14:04:50

标签: reactjs selenium selenium-webdriver onmousedown

我有一个div(使用React组件),如下所示:

    <div className="drag-tab" onMouseDown={this.handleMouseDown}>
      <span className="drag-icon"></span>
    </div>

handleMouseDown如下所示:

  handleMouseDown(e) {
    console.log('The mouse down event');
  }

我想使用selenium webdriver为此编写验收测试。我的代码中的重要部分如下所示:

  async function dragWidget() {
    const elem = driver.findElement(By.css('.drag-tab'));
    //await driver.sleep(1000);
    return driver
      .actions()
      .mouseDown(elem)
      // some other stuff for dragging here
      .perform()

  }

当我取消注释await driver.sleep(1000);时,它会进入处理程序并记录“鼠标按下事件”。但是没有睡觉它就不会去那里。似乎需要一些时间来设置onMouseDown监听器。我已经尝试了一切,等到它准备好“鼠标被击落”,但没有任何成功。我试过的是等待elementIsEnabledelementLocatedelementIsVisible,但它们不起作用。我不想使用sleep。请注意,如果我使用onClick更改鼠标按下事件,则会发生类似情况。但是我需要解决鼠标的问题。

谢谢

更新

问题在于div具有使元素超出其父div的范围的样式,即它是这样的:

<div className="parent-div">
  <div className="drag-tab" onMouseDown={this.handleMouseDown}>
    <span className="drag-icon"></span>
  </div>
</div>

风格:

.drag-tab {
  position: absolute;
  display: inline;
  width: 40px;
  height: 48px;
  top: 150px;
  left: -40px;
}

问题是-40px部分使div'40px留给父div。奇怪的是,如果我将-40px更改为-20px测试工作,-21px则不然。 (断点似乎是宽度的一半)。

0 个答案:

没有答案