【问题标题】:Unable to Mouse Hover through xpath无法通过 xpath 鼠标悬停
【发布时间】:2018-03-30 04:54:10
【问题描述】:

我使用以下代码将鼠标悬停在元素上

Webelement el=driver.findElement(By.xpath("/html/body/app-root/div/app-root/div/app-admin-app/app-header/div/div[3]/a"));
Actions act = new Actions(driver);
act.moveToElement(el).perform();

但它不起作用。

元素的HTML如下:

<a _ngcontent-c4="" class="ui label " style="width:100%">
  <img _ngcontent-c4="" 
       class="ui right spaced avatar image" 
       src="assets/images/avatar.png">admin </a>

【问题讨论】:

  • html如下图, 管理员
  • 请给我定制的xpath
  • 如果 xpath //a[contains(. 'admin')] 只能找到一个准确的元素,请在您的代码中尝试。而且一般来说,鼠标悬停效果很容易被东西破坏。就像鼠标悬停在元素上,但页面正在刷新,或者页面的部分区域正在刷新/加载。所以当页面足够stable时,最好确保鼠标悬停。

标签: java selenium selenium-webdriver webdriver mouseover


【解决方案1】:

根据 HTML 元素是一个 Angular 元素,所以你必须诱导 WebDriverWait 然后 鼠标悬停 如下:

Actions act = new Actions(driver);
WebElement elem = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//a[@class='ui label']/img[@class='ui right spaced avatar image' and @src='assets/images/avatar.png']")));
act.moveToElement(elem).perform();

【讨论】:

    【解决方案2】:

    尝试使用JavascriptExecutor 类来执行相同的悬停功能:

    导入 JavascriptExecutor 类:

    import org.openqa.selenium.JavascriptExecutor;
    

    并用这个方法代替Actions类:

    WebElement element= driver.findElement(By.xpath("//a/img[contains(@src,'assets/images/avatar.png')]"));
    
    String mouseOver = "var evObj = document.createEvent('MouseEvents');" +
                        "evObj.initMouseEvent(\"mouseover\",true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);" +
                        "arguments[0].dispatchEvent(evObj);";
    
    ((JavascriptExecutor) driver).executeScript(mouseOver, element);
    

    试试这个,让我知道它是否适合你。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-04
      • 2018-09-03
      • 1970-01-01
      • 1970-01-01
      • 2015-04-22
      • 2011-05-26
      • 2017-10-14
      • 1970-01-01
      相关资源
      最近更新 更多