【问题标题】:I am having problems identifying the element using selenium in java我在 java 中使用 selenium 识别元素时遇到问题
【发布时间】:2021-12-15 00:51:45
【问题描述】:

我在尝试使用 selenium 和 java 识别元素时遇到问题...对于以下链接:

<a id="newSearchNavigateHeadingEventId_0" class="search-heading" ng-href="book/event?eid=757231&amp;" target="_self" href="book/event?eid=757231&amp;">
<h2 ng-bind="event.EventDisplayName" class="ng-binding">Makerspace Docklands - Safety Induction</h2>
</a>

我已经尝试了以下...

WebElement we = myDriver. findElement(By.linkText("Makerspace Docklands - Safety Induction"));
WebElement we =  myDriver.findElement(By.id("newSearchNavigateHeadingEventId_0"));
WebElement we =  myDriver.findElement(By.xpath( " //a[@id='newSearchNavigateHeadingEventId_01']  "));
WebElement we =  myDriver.findElement(By.xpath("//a[text()='Makerspace Docklands - Safety Induction']"));
WebElement we =  myDriver.findElement(By.xpath("//a[@href='book/event?eid=757231&amp;']")) ;

但我不断收到以下消息...

org.openqa.selenium.NoSuchElementException: Unable to locate element: ....

有人可以建议正确的路径,以便我可以点击链接:

we.click();

【问题讨论】:

    标签: java selenium selenium-webdriver xpath css-selectors


    【解决方案1】:

    要将带有文本的元素标识为 Makerspace Docklands - Safety Induction,您可以使用以下任一Locator Strategies

    • cssSelector

      WebElement we = driver.findElement(By.cssSelector("a.search-heading[id^='newSearchNavigateHeadingEventId']>h2.ng-binding[ng-bind*=EventDisplayName]"));
      
    • xpath

      WebElement we = driver.findElement(By.xpath("//a[@class='search-heading' and starts-with(@id, 'newSearchNavigateHeadingEventId')]/h2[contains(., 'Makerspace Docklands') and contains(@ng-bind, 'EventDisplayName')]"));
      

    但是,由于该元素是动态元素,因此要识别您需要为visibilityOfElementLocated() 诱导WebDriverWait 的元素,您可以使用以下任一定位器策略

    • cssSelector

      WebElement we = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("a.search-heading[id^='newSearchNavigateHeadingEventId']>h2.ng-binding[ng-bind*=EventDisplayName]")));
      
    • xpath

      WebElement we = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//a[@class='search-heading' and starts-with(@id, 'newSearchNavigateHeadingEventId')]/h2[contains(., 'Makerspace Docklands - Safety Induction') and contains(@ng-bind, 'EventDisplayName')]")));
      

    参考

    你可以在NoSuchElementException找到详细讨论:

    【讨论】:

      【解决方案2】:

      谢谢... 我发现这也对我有用...

      WebElement we = myDriver.findElement (By.xpath ("//*[contains(text(),'Makerspace Docklands - Safety Induction')]"));
      we.click();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-08
        • 2022-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多