【问题标题】:How to click on an icon through xpath consistently using Selenium如何始终使用 Selenium 通过 xpath 单击图标
【发布时间】:2018-05-09 13:45:14
【问题描述】:

请参阅下面从开发者工具复制的 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>

【问题讨论】:

  • @zx485 没关系!
  • 我猜这不是时间问题。我已经为页面加载添加了足够的等待时间。
  • fn 中的示例代码。下面调用 Browser.Driver.FindElement(By.LinkText("Location")).Click();线程.睡眠(5000); Browser.Driver.FindElement(By.XPath("(//*[@id='parentDiv']/table/tbody/tr[1]/td//i)[2]")).Click();线程.睡眠(1000); By element1 = By.XPath("//span[@t='cooler_details']");
  • 我已经写了一个答案,检查它是否工作正常,如果不能正常粘贴错误,如果它与可见性错误有关,那么问题是,&lt;profile-link-column device-id="${value.value}" class="au-target" au-target-id="395"&gt; &lt;a click.trigger="viewProfile()" class="au-target" au-target-id="55"&gt; &lt;i class="fa fa-newspaper-o"&gt;&lt;/i&gt; &lt;/a&gt; &lt;/profile-link-column&gt; 隐藏在你的html中.

标签: c# selenium selenium-webdriver xpath webdriver


【解决方案1】:

在此处使用css

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

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

【讨论】:

  • 消息:System.InvalidOperationException:未知错误:元素 在点 (1469, 786) 是不可点击的。其他元素会收到点击:...(会话信息:chrome=66.0. 3359.139)
  • 那么有些东西正在隐藏你的元素,检查任何屏幕或弹出窗口来隐藏该元素。
  • 实际上表格网格位于页面底部。我没有看到任何其他弹出窗口或屏幕隐藏它们。使用切换 xpather,我可以使用 xpath 表达式找到所有这些图标。以下内容有时也可以正常工作,但很少像我所说的 10 次中的 3 次。 Driver.FindElement(By.XPath("//i[@class='fa fa-newspaper-o']")).Click();
【解决方案2】:

要单击所需的元素,您必须诱导 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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多