javascript - 点击角色为='button'的div元素无效

标签 javascript selenium selenium-webdriver

点击role='button'的div元素不起作用。我需要点击图标,但我不能这样做。

html:

<div class="list">
  <div class="item">
    <div role="button" tabindex="-1">
      <strong>ItemName2</strong>
    </div>
    <div class="d">
      <div class="item-icon" role="button" tabindex="-1"  style="display: none">
        <i aria-label="icon: edit" class="edit"></i>
      </div>
    </div>
  </div>
  <div class="item"> ... </div>
  <div class="item"> ... </div>
  <div class="item"> ... </div>
</div>

js:

  try {
    await driver.get("http://127.0.0.1");

    let findButtons = await driver.findElements(By.tagName('strong'));

    let buttons = findButtons.map(elem => elem.getText());
    const allButtons = await Promise.all(buttons);
    console.log(allButtons);             // It is displayed all button values, such as ItemName1
    let tButton;
    for (let i = 0; i < findButtons.length; i++) {
      if (allButtons[i] == 'ItemName2') {
        tButton = await findButtons[i];
        tButton.click();                // I try to click on this button, where value = ItemName2
        console.log(allButtons[i]);     //  It is displayed button value 'ItemName2'    
      }}}

控制台错误:

(node:12254) UnhandledPromiseRejectionWarning: StaleElementReferenceError: stale element reference: element is not attached to the page document

最佳答案

您收到过时元素异常,因为您试图获取具有旧引用的元素。每次您单击循环中的元素时,元素引用都会更新,并且 allButtons[i] 不起作用。为了解决这个问题,您必须获取最新的按钮引用。尝试下面的方法。

js:

const { By, Key, until } = require("selenium-webdriver");
const webdriver = require("selenium-webdriver");
require("chromedriver");
async () => {
  let driver = await new webdriver.Builder().forBrowser("chrome").build();
  try {
    await driver.get("http://10.203.201.77:8000/login");

    let findButtons = await driver.findElements(By.tagName('strong'));

    let buttons = findButtons.map(elem => elem.getText());
    const allButtons = await Promise.all(buttons);
    console.log(allButtons);             // It is displayed all button values, such as ItemName1
    let tButton;
    for (let i = 0; i < findButtons.length; i++) {
      buttons = findButtons.map(elem => elem.getText()); # getting the button so that the elements refererence will refresh
      if (allButtons[i] == 'ItemName2') {
        tButton = await findButtons[i];
        tButton.click();                // I try to click on this button, where value = ItemName2
        console.log(allButtons[i]);     //  It is displayed button value 'ItemName2'

      }
    }
      console.log("DONE");
    } catch (e) {
      console.log(e);
    } finally {
      await driver.quit();
    }
  }
}

关于javascript - 点击角色为='button'的div元素无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58954627/

相关文章:

javascript - ReactJS错误编译失败 'define'未定义

python - 在 python 中使用 selenium 循环访问一组 webelement

python - 使用 selenium 和 phantomJS 更改 "user-agent" header

javascript - Angular2 缓存 HTTP 响应的最简单方法

javascript - Laravel 5 分页 + 无限滚动 jQuery

javascript - Jquery - 在不破坏 dom 的情况下切换 mousedown 事件?

java - 如何从 Selenium 中的跨度类中获取文本

java - 在新窗口中查找 xpath 位置,单击后打开。使用 java 和 selenium

java - 使用 selenium webdriver 在第 2 列中写入数据时,数据从第 1 列中删除

python-3.x - Chrome Canary headless 模式在 Windows 10 上不起作用