如何在 C# 中单击带有 Selenium 的 JS 链接

Posted

技术标签:

【中文标题】如何在 C# 中单击带有 Selenium 的 JS 链接【英文标题】:How to click a JS link with Selenium in C# 【发布时间】:2017-02-21 19:40:03 【问题描述】:

我是 Selenium 的新手,正在尝试用它构建一个项目。我需要学习如何单击 JS 链接。有许多按页面列出的项目。不幸的是,分页是由 JS 完成的。这是一个例子...

<ul class="pagination museo-700">
    <li class="first hidden disabled">
        <a href="#">First</a>
    </li>
    <li class="prev disabled">
        <a class="arrow" href="#">
            <img src="/areas/site/Content/images/page/pagination-prev-arrow.png">
        </a>
    </li>
    <li class="page active">
        <a href="#" class="active">1</a>
    </li>
    <li class="page">
        <a href="#">2</a>
    </li>
    <li class="page">
        <a href="#">3</a>
    </li>
    <li class="page">
        <a href="#">4</a>
    </li>
    <li class="page">
        <a href="#">5</a>
    </li>
    <li class="next">
        <a class="arrow" href="#">
            <img src="/areas/site/Content/images/page/pagination-next-arrow.png">
        </a>
    </li>
    <li class="last hidden">
        <a href="#">Last</a>
    </li>
</ul>

我想点击页面 1., 2., 3. ,4.和 5. 页以上。请给我一个线索

【问题讨论】:

【参考方案1】:

代码未经测试,但我觉得它们应该可以工作

.page > a:contains("1")
.page > a:contains("2")
.page > a:contains("3")
.page > a:contains("4")
.page > a:contains("5")

//li[contains(@class, 'page')]/a[text()='1']

【讨论】:

【参考方案2】:

您可以先使用 CSS 选择器定位寻呼机,然后通过链接文本找到每个链接:

driver.FindElement(By.CssSelector("ul.pagination"))
      .FindElement(By.LinkText("1")).Click();

您也可以使用 XPath:

driver.FindElement(By.XPath("//a[@href='#'][text()='1']")).Click();

【讨论】:

以上是关于如何在 C# 中单击带有 Selenium 的 JS 链接的主要内容,如果未能解决你的问题,请参考以下文章

如何错误处理 Selenium 无法单击元素,因为其他元素在 C# 中遮挡了它? [复制]

如何使用 jQuery 在 Selenium WebDriver 中单击带有 Java 的按钮

如何在Selenium中单击带有锚标记的图像或图标

Selenium C# Webdriver如何检测元素是不是可见

如何在 C# Selenium 中向 FirefoxDriverService 添加配置文件规范?

在带有 selenium 的 python 中,如何轮换 IP 地址?