【问题标题】:How to get href value in selenium webdriver when javascript is called upon click of a link?单击链接时调用javascript时如何在selenium webdriver中获取href值?
【发布时间】:2016-08-24 08:09:30
【问题描述】:

感谢您查看我的查询。在一个网页上,有 200 多个链接,我确保所有链接都正常工作。获取href 值后这很容易,但问题是,“href”值不包含link,而是一个“javaScript 函数”,这是一个源代码

<a tabindex="8" title="Internal Crossload" target="_self" href="javascript:fnnHomePage('3' , 'WTMS_EXPRESS')">&nbsp;&nbsp;&nbsp;&nbsp;- Internal Crossload </a>

JavaScript 函数:

<Script>
    /*********************************************************************
    Function Name          : fnnHomePage
    Input Parameter(s)     : transferTypeId
    Output Parameter(s)    : None
    **********************************************************************/
    function fnnHomePage(transferTypeId ,moduleName) {
        if (moduleName == "XXX_EXPRESS")
     {
            document.getElementById("transferTypeId").value=transferTypeId;
            document.getElementById("gadgetType").value="XXX_EXPRESS";
            document.getElementById("moduleName").value="XXX_EXPRESS";
            document.forms[0].action="/XXX/getProposalHomePage.do?transferTypeId="+transferTypeId;
        document.forms[0].submit();
     }
        if (moduleName ==  "CROSSLOAD")
         {
            document.getElementById("transferTypeId").value=transferTypeId;
            document.getElementById("gadgetType").value="CROSSLOAD";
            document.getElementById("moduleName").value="CROSSLOAD";
            document.forms[0].action="/XXX/getCrossLoadHomePage.do?transferTypeId="+transferTypeId;
            document.forms[0].submit();
         }
    }
</Script>

从上面的代码中,我如何获得一个“Link”并检查它在 selenium webdriver 中是否正常工作?有几个链接,每个链接都调用不同的“JavaScript 函数”。任何建议将不胜感激。谢谢。

【问题讨论】:

  • 主要问题是 document.form.submit() 调用。没有简单的方法可以抑制这种情况。但我的 JavaScript 经验非常有限。如果您管理它,那么您可以遍历所有 href,单击它们并获取表单操作属性中的链接。
  • 这是一个显示如何抑制它的链接 - stackoverflow.com/questions/31377500/… -- 检查 TJ Crowder 答案。我认为您需要使用 javascriptexecutor 将该函数注入脚本标签,然后调用它。也许它会起作用。
  • 如何使用 webdriver 事件监听器 - public void beforeNavigateTo(String url, WebDriver driver) { System.out.println("Before navigating to: '" + url + "'"); }。如果您在其中添加 driver.navigate.back() 可能会起作用。
  • @Grasshopper 我不确定网页上会有多少链接,也不确定源代码中的 URL。所以这种方法不适用于我的情况。
  • 您无需担心源中的 url 数量或 url 值。您只需要设置一个 webdriver 侦听器。 webdriver 框架将使用 javascript 自动生成的 url 调用此方法,然后在单击链接后导航到页面。您只需要使用 EventFiringWebDriver 并创建逻辑来维护您正在单击的链接。谷歌它或检查这个 - seleniumeasy.com/selenium-tutorials/…

标签: javascript selenium selenium-webdriver


【解决方案1】:

您可以使用一个简单的技巧——点击链接。它会将您重定向到由 javascript 函数生成的新链接。然后,使用driver.getCurrentUrl(); 获取链接并返回您的原始页面并照常进行操作。

我希望,这是有道理的。

【讨论】:

  • 感谢您的回复。我不想前后移动,因为这很耗时。
  • 然后您可以在新选项卡中打开所有链接,并在获取它们的 URL 时遍历它们。它会比前后移动更快,您将能够检查链接的有效性。
【解决方案2】:

这是工作代码,使用此代码您可以在控制台上查看所有链接,并且您可以进一步导航到所有链接:

 driver.get("https://www.facebook.com");
    List<WebElement> all_links_webpage = driver.findElements(By.tagName("xyz")); 
    System.out.println("Total no of links Available: " + all_links_webpage.size());
    int links = all_links_webpage.size();
    System.out.println("List of links Available: ");
    for(int i=0;i<links;i++)
    {
    if(all_links_webpage.get(i).getAttribute("href").contains("google"))
    {
    String link = all_links_webpage.get(i).getAttribute("href");
    System.out.println(link);
    }   
    }

希望这能解决您的问题。

【讨论】:

  • 感谢您的快速回复。如果 'href=www.google.com/mail' 这将起作用,但在这种情况下,会调用一个 javascript 函数。这不会获取 URL,而是在控制台上打印 javascript 函数名称。
猜你喜欢
  • 2012-04-28
  • 2016-12-28
  • 1970-01-01
  • 2015-08-18
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多