【问题标题】:unreachable code after return statement, while open social media links from a widgetreturn 语句后无法访问代码,同时从小部件打开社交媒体链接
【发布时间】:2018-08-20 13:30:53
【问题描述】:

我有一个包含社交媒体图标按钮的小部件,下图是:

和html代码

<div class="collapse navbar-collapse social-icon" id="socialwidget-nav">
 <ul id="HeaderSocialIcons" class="nav-pills">
     <li class="facebook-icon">
         <a id='ImageUrlNavigate' class='socialWidgetIcon' href='https://www.facebook.com/324421790958939' target = '_blank' style='margin:0px;'></a>
     </li>
     <li class="twitter-icon">
         <a id='ImageUrlNavigate' class='socialWidgetIcon' href='https://www.twitter.com' target = '_blank' style='margin:0px;'></a>
     </li>
     <li class="linkedin-icon">
         <a id='ImageUrlNavigate' class='socialWidgetIcon' href='https://www.linkedin.com' target = '_blank' style='margin:0px;'></a>
 </li>
 <li class="google-icon">
     <a id='ImageUrlNavigate' class='socialWidgetIcon' href='https://www.google.com1' target = '_blank' style='margin:0px;'></a>
     </li>
     <li class="youtube-icon">
     <a id='ImageUrlNavigate' class='socialWidgetIcon' href='https://www.youtube.com' target = '_blank' style='margin:0px;'></a>
     </li>
     <li class="instagram-icon">
         <a id='ImageUrlNavigate' class='socialWidgetIcon' href='https://www.Instagram.com' target = '_blank' style='margin:0px;'></a>
 </li>
 <li class="pinterest-icon">
     <a id='ImageUrlNavigate' class='socialWidgetIcon' href='https://www.pintrest.com' target = '_blank' style='margin:0px;'></a>
 </li>
 <li class="blog-icon">
     <a id='ImageUrlNavigate' class='socialWidgetIcon' href='/MyBlog.aspx' target = '_blank' style='margin:0px;'></a>
     </li>
 </ul>

我想使用此脚本打开所有社交媒体链接

package TestScripts;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;

public class TestSemiCustom {

    public static void main(String[] args) {

System.setProperty("webdriver.gecko.driver", "C:/geckodriver/geckodriver-v0.21.0-win64/geckodriver.exe");
        //System.setProperty("webdriver.chrome.driver", "C:\\Users\\Hassan\\Documents\\eclipseworkspace\\WebDriverProject\\lib\\chromedriver.exe");

        WebDriver driver = new FirefoxDriver();
        //driver.manage().timeouts().implicitlyWait(40, TimeUnit.SECONDS);
        driver.get("http://www.example.com/");
        driver.manage().timeouts().implicitlyWait(40, TimeUnit.SECONDS);

        String oldTab = driver.getWindowHandle();
        Actions action= new Actions(driver);
        List<WebElement> socialMediaIcons = driver.findElements(By.xpath("//*[@id='ImageUrlNavigate']"));
        System.out.println("Size of list = " + socialMediaIcons.size());
        for (WebElement AllSocial : socialMediaIcons)
        {
            String Name =  AllSocial.getAttribute("href");
            System.out.println(Name);
            AllSocial.click();
        }
        driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);        
                  action.keyDown(Keys.CONTROL).keyDown(Keys.SHIFT).sendKeys(Keys.TAB).build().perform();

    }

}

最后用户将导航到父标签

但我收到以下错误:

JavaScript 警告:https://static.xx.fbcdn.net/rsrc.php/v3ik7f4/yY/l/en_GB/zomArbZJYcR.js,第 1094 行:return 语句后无法访问代码

请注意,此社交媒体在页眉和页脚上使用相同的 html 代码

我需要做什么?

【问题讨论】:

  • 这是一个 Javascript 警告。如果您的代码不起作用,我猜它是别的东西。它在什么方面不起作用?
  • 我认为问题在于,这个小部件多次在页面上,在页眉和页脚上使用相同的 html 代码,这意味着它让我获得相同的 xpth 并且当我申请循环给予我的 webelement 列表的大小为 16,标题社交媒体链接为 8,页脚社交媒体链接为 8,这就是它进入无限循环的原因
  • 你能在第 1094 行显示文件 zomArbZJYcR.js 吗?错误消息意味着在 return 语句之后有命令。 return 语句,意味着方法的结束,因此它之后的任何命令都无法执行。
  • 什么进入了无限循环?哪个代码?

标签: java selenium firefox selenium-webdriver


【解决方案1】:

您可以使用 LeftCtrl + LeftClick 打开所有这些。

我在 C# 中添加了一个示例来演示它

Actions actions = new Actions(browser);
actions.KeyDown(Keys.LeftControl);
for (IWebElement socialIcon in allSocialIcons)
{
    actions.Click(socialIcon);
}      
actions.KeyUp(Keys.LeftControl)
    .Build()
    .Perform();

它将所有的 socialIcon 添加到操作列表中,然后才执行它。

【讨论】:

    猜你喜欢
    • 2021-02-28
    • 1970-01-01
    • 2016-05-23
    • 2017-02-26
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多