【问题标题】:My element locator is not working while correctly located the element in dev tools在开发工具中正确定位元素时,我的元素定位器无法正常工作
【发布时间】:2019-12-10 15:45:36
【问题描述】:

我有这个指向文档的超链接...

<a _ngcontent-bcl-c5="" class="card-title" ng-reflect-router-link="/activityDetail,c2efa137-0cf3-" href="/activityDetail/c2efa137-0cf3-8997-bedb-94520063517b">AMA_LEARNING_AMA-2019-088</a>

我使用xpath作为

By.xpath("//a[contains(@href,'activityDetail')]") (OR)
By.xpath("//a[contains(@href,'/activityDetail/')]")

当然,它是一个 Angular 应用程序,我正在尝试将 Selenium 与 Java 一起使用。大多数网络元素定位器都工作正常,除了这个。当我在开发工具窗口中尝试它时,它正确定位了 2 个这样的元素,但是当我运行测试时,它们都没有找到。 是的,我本可以使用 ngWebDriver 工具,但是没有多少角度属性可以使用它。 有什么有用的建议吗?

【问题讨论】:

  • 您遇到的错误是什么?
  • 检查元素是否存在于 iframe 中。如果答案是肯定的,那么您必须切换到框架才能与它们交互。试试这个 xpath 看看是否有 iframe //a[contains(@href,'activityDetail')]/ancestor::html/.. 这将带你到 iframe 文档(如果有)。

标签: angular selenium xpath css-selectors webdriverwait


【解决方案1】:

所需的元素是Angular 元素,因此要在需要为elementToBeClickable() 诱导WebDriverWait 的元素上使用click(),您可以使用以下任一Locator Strategies

  • linkText:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.linkText("AMA_LEARNING_AMA-2019-088"))).click();
    
  • cssSelector:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("a.card-title[ng-reflect-router-link^='/activityDetail'][href^='/activityDetail']"))).click();
    
  • xpath:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@class='card-title' and text()='AMA_LEARNING_AMA-2019-088'][starts-with(@ng-reflect-router-link, '/activityDetail') and starts-with(@href, '/activityDetail')]"))).click();
    

【讨论】:

  • 最后,它比我想象的要容易。只需合并 Thread.sleep(5000) 就可以定位这两个 Web 元素。据我所知,使用隐式 Thread.sleep() 方法是一种不好的做法。所以,我会采用@DebanjanB 建议的方法和等待机制。
猜你喜欢
  • 2014-11-12
  • 1970-01-01
  • 1970-01-01
  • 2021-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-20
相关资源
最近更新 更多