【问题标题】:Java Selenium - Searching Using xpath not finding searched elementJava Selenium - 使用 xpath 搜索未找到搜索到的元素
【发布时间】:2016-10-31 19:41:30
【问题描述】:

这里有两个代码段,我用于从具有“从日期”和“截止日期”的日历中搜索日期。

        webDriver.findElement(By.xpath("//table/tbody/tr/a[contains(text(),'October 30')]")).click();

        webDriver.findElement(By.xpath("//table/tbody/tr/a[contains(text(),'October 31')]")).click();

错误信息显示: 线程“main” org.openqa.selenium.NoSuchElementException 中的异常:没有这样的元素:无法找到元素:{“method”:“xpath”,“selector”:“//table/tbody/tr/a[contains(text (),'10 月 30 日')]"}

代码段图片: 请帮助。谢谢。

【问题讨论】:

    标签: selenium xpath selenium-webdriver selenium-chromedriver


    【解决方案1】:

    有两件事需要解决(至少):

    • a 元素不是tr 的直接子元素,还有一层 - td 元素
    • 您需要检查title 属性而不是text()

    固定版本:

    //table/tbody/tr/td/a[contains(@title, 'October 30')]
    

    或者,使用严格的相等检查:

    //table/tbody/tr/td/a[@title = 'October 30']
    

    或者,避免检查父母:

    //a[@title = 'October 30']
    

    或者,您也可以尝试使用更简洁的 CSS 选择器

    webDriver.findElement(By.cssSelector("a[title='October 30']")).click();
    

    【讨论】:

    • 感谢 alecxe 的反馈。它已经部分解决了这个问题。我现在可以看到正在单击“开始日期”和“截止日期”字段,但“开始日期”会在不到一秒的时间内被清除,当为选定的日期范围生成报告时,所选日期范围看起来是“截止日期”正在申请从日期和“截止日期”字段。
    • @mkarim 是的,从它的声音来看,我认为你应该进行特定于上下文的搜索 - 意思是,而不是简单地使用 //table/...,使用 //table[@id='MainContent_FromDate']/... 作为起始日期,类似地迄今为止..希望有所帮助。
    • 抱歉回复晚了。使用 By.xpath 我能够解决这个问题。这是 From Date 的代码: clickFromDate = webDriver.findElement(By.xpath("/html/body/form[@id='ctl01']/div[@class='container-fluid body-content']/div [@class='container']/div[@class='row'][2]/div[@class='col-sm-6'][1]/table[@id='MainContent_FromDate']/tbody /tr[3]/td[1]/a")); clickFromDate.click();
    • 迄今为止的代码:WebElement clickToDate = webDriver.findElement(By.xpath("/html/body/form[@id='ctl01']/div[@class='container-fluid body -content']/div[@class='container']/div[@class='row'][2]/div[@class='col-sm-6'][2]/table[@id= 'MainContent_ToDate']/tbody/tr[3]/td[4]/a")); clickToDate.click();
    【解决方案2】:

    不要依赖日期。它是不稳定的,因为从日期到现在都不是固定日期。它可能会因每条记录而改变。

    【讨论】:

    • 感谢您的反馈 Rajkumar。有没有一种好方法可以从日历中选择并单击日期字段。目前我已经使用 xpath 来解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 2017-04-27
    • 2017-12-16
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    相关资源
    最近更新 更多