如何使用Selenium一致地通过xpath单击图标

时间:2018-05-09 13:45:15

标签: c# selenium selenium-webdriver xpath webdriver

请参阅下面从开发人员工具复制的xpath表达式。

//*[@id="parentDiv"]/table/tbody/tr[1]/td[8]/div/profile-link-column/a/i

我想点击第一行中的第8个表格数据(实际上是一个小图标),所以10次中有3次可以正常工作。

有人可以提出更可靠的方法吗?

这是我的HTML:

<td>
    <!--anchor-->
    <div class="animated-slide-in au-enter-active">
        <profile-link-column device-id="${value.value}" class="au-target" au-target-id="395">
            <a click.trigger="viewProfile()" class="au-target" au-target-id="55">
                <i class="fa fa-newspaper-o"></i>
            </a>
        </profile-link-column>
    </div>
    <!--anchor-->
    <!--anchor-->
    <!--anchor-->
    <!--anchor-->
    <!--anchor-->
</td>

2 个答案:

答案 0 :(得分:0)

在这里使用css

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.findElement(By.cssSelector("i.fa.fa-newspaper-o")).click

检查它是否正常工作,如果它不起作用,那么请粘贴错误,如果它与可见性错误有关,那么我认为问题是,<profile-link-column device-id="${value.value}" class="au-target" au-target-id="395"> <a click.trigger="viewProfile()" class="au-target" au-target-id="55"> <i class="fa fa-newspaper-o"></i> </a> </profile-link-column>隐藏在你的html中。

答案 1 :(得分:0)

要点击所需元素,您必须引导 WebDriverWait 以使元素可点击,如下所示:

new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//td/div[@class='animated-slide-in au-enter-active']/profile-link-column[@class='au-target']/a[@class='au-target']/i[@class='fa fa-newspaper-o']"))).Click();