【问题标题】:Selenium Click a non-button elementSelenium 单击非按钮元素
【发布时间】:2020-07-14 16:00:40
【问题描述】:

所以我试图点击一个不是按钮元素的元素,html代码如下:

<div class="menu-item-header">
   <span class="header-title"><span class="icon-wrapper"><i class="icon-helper"></i></span>Help
   </span> <!--When a client clicks this it redirects them to the appropriate place (this is a React website)-->
</div>

原来的网站是这样的:

<div class="menu-item-header">
   <span class="header-title"><span class="icon-wrapper"><i class="icon-helper"></i></span>Help
   </span> <!---->
</div>
<div class="menu-item-header">
   <span class="header-title"><span class="icon-wrapper"><i class="icon-helper2"></i></span>Help2
   </span> <!---->
</div>
...

我尝试了以下方法来点击元素:

WebElement element = browser.findElement(...);
element.click();

然而这并没有奏效。

【问题讨论】:

  • however that did not work 你遇到了什么错误?

标签: java selenium selenium-webdriver xpath webdriverwait


【解决方案1】:

所需元素是 React 元素,因此要单击带有文本作为 Help 的元素,您需要将 WebDriverWait 诱导为 elementToBeClickable(),您可以使用以下任一 @ 987654323@基于Locator Strategy

new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='menu-item-header']/span[@class='header-title' and contains(., 'Help')]"))).click();

【讨论】:

    【解决方案2】:

    您始终可以默认使用 JavaScript。

    driver.execute_script("document.getElementById('#&lt;id&gt;').click()");

    或者,如果它只有一个类标识符:

    driver.execute_script("document.getElementsByClassName('.&lt;classname&gt;')[0].click()")

    话虽如此,使用 span 或 div 作为功能按钮不符合可访问性标准,因此,如果您可以访问代码库或可以影响它,我强烈建议您改用按钮。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-16
      • 2017-03-25
      • 2011-02-18
      • 1970-01-01
      • 2021-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多