【问题标题】:Unable to locate element using all the element locators that I know the HTML is build using CSS selector无法使用我知道 HTML 是使用 CSS 选择器构建的所有元素定位器来定位元素
【发布时间】:2018-12-05 00:35:42
【问题描述】:

这是我要查找财务报告的 HTML 页面。我曾尝试使用 XPath、CSS 选择器但没有运气:

<div id='cssmenu'>
    <ul>                        
        <!-- ANALYSIS -->
        <div style="margin:10px">ANALYSIS</div>

        <li class='has-sub'><a href='javascript:void(0)'><div>Accruals</div></a>
            <ul>
                <li><a href='/financial/dailyAccrualMaintain.do?action=DAILY_MAINTAIN_OPEN&clear=true'><div>Daily</div></a></li>
                <li class='last'><a href='/financial/accrual.do?action=list1&clear=true'><div>Monthly</div></a></li>
            </ul>
        </li>
        <li><a href='/financial/financialReports.do?action=LIST_REPORTS&clear=true'><div>Financial Reports</div></a></li>
        <li><a href='/financial/validationReports.do?action=LIST_REPORTS&clear=true'><div>Validation Reports</div></a></li>
        <li><a href='/financial/financialCheck.do?action=OPEN&clear=true'><div>Financial Check</div></a></li>

    </ul>
</div>

我使用 CSS 选择器定位元素的 Java 代码,我还使用了等待直到元素可见:

private final String finacialReportpath = "div#cssmenu li:nth-child(3)"; 
    @FindBy(css = finacialReportpath)
    private WebElement finacialReport;

public void clickfinacialReport() {

        wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(finacialReportpath)));
        wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector(finacialReportpath)));

        this.finacialReport.click();

}

【问题讨论】:

  • 您希望clickli 上做什么?也许您想改为选择a?它有一组更独特的属性可供选择,这很有用...
  • Div 不能是 ul 的直接子级 - 您的 html 无效,这可能是您的选择器不起作用的原因
  • IMO,不能单独选择financial report,要么你必须先选择DailyMonthly然后你可以调用点击相应的与financial report有关的元素

标签: java css selenium


【解决方案1】:

您似乎想点击该链接,但您选择的是li。也许选择链接(这也具有拥有一组相当独特的属性的优势):

private final String finacialReportpath = "a[href^='/financial/financialReports.do']";
// Changed -------------------------------^
@FindBy(css = finacialReportpath)
private WebElement finacialReport;

public void clickfinacialReport(){

    wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(finacialReportpath)));
    wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector(finacialReportpath)));

    this.finacialReport.click();

}

^= 表示“starts with”。

【讨论】:

  • 还是找不到元素
【解决方案2】:

你可以使用这个 XPath:

//a[contains(.,'Financial Reports')]

而且,如果您找不到它,请确定您是否在任何框架中。
如果出现在框架中,则切换到它,然后尝试找到该元素。

【讨论】:

    猜你喜欢
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 2019-12-25
    • 2018-03-07
    • 2012-05-23
    • 2020-03-01
    • 2016-05-02
    相关资源
    最近更新 更多