【问题标题】:How to click link with same names in selenium webdriver?如何在 selenium webdriver 中单击具有相同名称的链接?
【发布时间】:2014-05-20 12:27:54
【问题描述】:

我在 java 中使用 selenium web 驱动程序。我想单击名称为下载的链接。 实际上有四个同名的链接。当我检查我得到的元素时

<a href="http://selenium-release.storage.googleapis.com/2.41/selenium-java-2.41.0.zip"></a>

我正在尝试点击以下链接

driver.findElement(By.xpath("//a[@ href='//http://selenium-release.storage.googleapis.com/2.41/selenium-java-2.41.0.zip']")).click();

在以下链接中,我尝试单击第一个下载链接。 Selenium Download

点击不工作。谁能告诉我如何点击这个特定的链接?

提前致谢。

【问题讨论】:

    标签: java selenium xpath


    【解决方案1】:

    你的 xpath 是正确的,除了两件事:

    1. @ 和 href 之间的空格;
    2. http 前两个斜线。

    纠正这个,它会工作。

    我也不推荐使用这样的 xpath。如果 href 值发生更改,您的 xpath 将无法正常工作。

    所以为了避免这种情况,你可以使用 xpath 之类的:

    //tbody//td[text()='Java']/following-sibling::td/a[text()='Download']

    即使 href 值发生更改(例如更改为 2.42),它也会单击 Java 的下载链接。

    【讨论】:

      【解决方案2】:

      Richard 的回答是正确的,但是这个 xpath 更容易阅读:

      //td[(text()='Java')]/following-sibling::td/a[text() = 'Download']
      

      【讨论】:

        【解决方案3】:

        此 xpath 将找到 Java 的下载链接:

        //td[(text()='Java')]/following-sibling::td[3]/a
        

        【讨论】:

          【解决方案4】:

          好吧.. 我们可以通过多种方式使用 xpath 识别元素。

          除了其他人的建议之外,我只想提一下以下识别特定元素的方法。如果您知道您的元素在网页中出现的顺序,它会派上用场。

          (//a[text()='Download'])[2]
          

          您也可以参考下面的几个链接以供参考。

          http://www.quackit.com/xml/tutorial/xpath_string_functions.cfm http://news.rapgenius.com/Mat-brown-xpath-is-actually-pretty-useful-once-it-stops-being-confusing-annotated#note-2363798

          【讨论】:

            【解决方案5】:

            在'a'标签之间留出小空间,

            <a href="http://selenium-release.storage.googleapis.com/2.41/selenium-java-2.41.0.zip"> </a>
            

            从 http 单词之前取出 //(双斜杠)。

            driver.findElement(By.xpath("//a[@href='http://selenium-release.storage.googleapis.com/2.41/selenium-java-2.41.0.zip']")).click();
            

            如果我们使用

            //td[(text()='Java')]/following-sibling::td/a[text() = 'Download'] 
            

            此代码仅反映 webdrive(testing) 。所以,我对“Fani Khokhar”代码进行了小修改。

             $.ajax({
                        type: 'get',
                        url: 'http://docs.seleniumhq.org/download/',
                        success: function(data) {
                            var html = $.parseHTML(data);
                            var main_content = $(html).find('#mainContent table:eq(0)');
                            var row_count = main_content.find("tbody").find("tr");
                            for (var i = 0; i < row_count.length; i++) {
                                var MyIndexValue = $(main_content.find("tbody").find("tr:eq(" + i + " )")).find("td:eq(0)").html();
                                if (MyIndexValue == "Java") {
                                    var href_value = main_content.find("tbody").find("tr:eq(0)").find("td:eq(3)").html();
                                    var current_version_link = $(href_value).attr('href');
                                    $("#here_getback_latest_version").html("<a href=" + current_version_link + "/> </a>");
                                } else {
                                    console.log(MyIndexValue + " not required.");
                                }
                            }
                        },
                        error: function() {
                            alert("error");
                        }
                    });
            

            跟着,

            <div id="here_getback_latest_version"></div>
            

            如果我们在源代码中进行了修改,即使最新版本发生了更改,它也会自动下载。

            【讨论】:

            • @FaniKhokhar 我强烈反对这个答案。下次 Selenium 版本更改时它将中断。
            • @Richard 我添加了小修改。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-04-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-11-04
            相关资源
            最近更新 更多