2017-02-08 7 views
0

私はC#と特にSeleniumの初心者です。私が提供しているコードは意図したとおりに動作しますが、私はそれに追加したいと思います。基本的にSeleniumを使用してLinkedinにログインし、会社の現在の従業員(この例ではWalmart)を検索し、各ユーザーの "send inmail"のリンクを削ります。もうありません。以下は、linkedin、loginを開き、walmartをsearchboxに入力し、次のボタンをクリックします。特定のリンクを抽出してテキストファイルに書き込む方法

すべてのSend InMailボタン内のリンクをテキストファイルに書きたいと思います。送信InMailボタンのいずれかを点検すると、次が得られます。

<a class="primary-action-button label" href="/requestList?displayProposal=&amp;destID=262919732&amp;creationType=DC&amp;authToken=BrmS&amp;authType=name&amp;trk=vsrp_people_res_pri_act&* amp;trkInfo=VSRPsearchId%3A5225861601486589992400%2CVSRPtargetId%3A262919732%2CVSRPcmpt%3Aprimary">Send InMail</a> 

私はすべての「次」ボタンを介してサイクルとしてテキストファイルにこれらのリンクの全てを書きたいと思います。また、ドロップダウンリストから「検査」できなかった値を選択する方法を知りたいと思います。「Walmart」などの検索ボックスに何かを入力すると、ドロップダウンで「ウォルマートで現在働いている人」などを選択するオプションなどです。何らかの理由で開発者モードでそのオプションを検査することさえできませんでした。 私のコードを更新しました...これは今、必要なものをしたいと思っています...しかし、 "次の"ボタンが "InMailの送信"ボタンの前にロードされているタイミングの問題があるようです...それは、コンソールにはいくつかの結果を印刷し、今後数回のクリックが、その後、メルトダウンに思われます

// Go to the home page 
      driver.Navigate().GoToUrl("https://www.linkedin.com"); 



      // Get User Name field, Password field and Login Button 
      var userNameField = driver.FindElementById("login-email"); 
      var userPasswordField = driver.FindElementById("login-password"); 
      var loginButton = driver.FindElementByXPath("//input[@value='Sign in']"); 

      // Type user name and password 
      userNameField.SendKeys("[email protected]"); 
      userPasswordField.SendKeys("Password123"); 

      // and click the login button 
      loginButton.Click(); 

      // perform search 
      var newSearch = driver.FindElementById("main-search-box"); 
      var searchButton = driver.FindElementByName("search"); 

      // search 
      newSearch.SendKeys("walmart"); 
      searchButton.Click(); 

      // Get all links from Send InMail buttons 
      List<IWebElement> elementList = new List<IWebElement>(); 
      elementList.AddRange(driver.FindElements(By.LinkText("Next >"))); 
      if (elementList.Count > 0) 
      { 
       foreach(IWebElement item in driver.FindElements(By.LinkText("Send InMail"))) 
       { 

        Console.WriteLine(item.GetAttribute("href")); 
        var goForward = driver.FindElementByLinkText("Next >"); 
        goForward.Click(); 

       } 
      } 


      Console.ReadLine(); 

答えて

0

を私が理解する限りでは、あなたが検索を実行した後に、なり、検索結果が存在します添付されている図のようにリストに表示されます。

screenshot of the Linkedin search result.

そして、すべての結果が達成されるまで、同様の方法(ここでのサンプルコードはJavaであり、C#で同様のかもしれません)

List<WebElements> results_div = driver.findElemnts(By.xpath("//*[@id="results"]")) // where xpath of the <ul> element 

int counter = 2 // because the data starts from id = 2. Refer image. 
while(counter <= results_div) 
{ 
    WebElement element = driver.findElements(By.xpath("//*[@data-li-position=\"+counter+\"])) //xpath of the <li> element 
    String anchor_text = element.findElement(By.linkText("Send InMail")).getAtribute("href") 

    //Write a logic to save the data to a text file 
} 

反復以上を使用して結果を反復処理!

希望します。

編集:これを試してみてください。動作するコードではありません!しかし、これらの理由でそれを試してください。それは助けるかもしれない。

@Test(description = "Search the Site with some predefined words after Login and print the href attribute") 
public void printUserID() 
{ 
    StartPage startPage = new StartPage(driver); 
    HomePage homePage = startPage.loginIntoAccount(LinkdinAccount.linkedEmail,LinkdinAccount.linkedPassword); // Logs in in to the account 

    driver.findElement(By.xpath("//*[@id=\"main-search-box\"]")).sendKeys("herbalife"); 
    driver.findElement(By.xpath("//*[@id=\"global-search\"]/fieldset/button")).click(); 

    WebDriverWait wait = new WebDriverWait(driver, 60); 
    wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath("//*[@id=\"results\"]")))); 

    List<WebElement> results_div = driver.findElements(By.xpath("//*[@id=\"results\"]/li")); // where xpath of the <ul> element 
    System.out.println(results_div.size()); //*[@id="results"] 

    #driver.findElement(By.xpath("//*[@id=\"results-pagination\"]/ul/li[11]/a")).click(); 

    int count = 1; 

     wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath("//*[@id=\"results\"]")))); 

    while(driver.findElement(By.xpath("//*[@id=\"results-pagination\"]/ul/li[11]/a")).isDisplayed()) 
    { 
     while(count <= results_div.size()) 
     { 
     WebElement element = driver.findElement(By.xpath("//*[@data-li-position=\"" + count + "\"]")); 


     if(element.findElements(By.linkText("Send Inmail")).size() > 0) 
     { 
      String anchor_text = element.findElement(By.linkText("Send InMail")).getAttribute("href"); 
      System.out.println(anchor_text); 
     } 

     count ++; 
     } 
    //for clicking the next button 
    driver.findElement(By.xpath("//*[@id=\"results-pagination\"]/ul/li[11]/a")).click() 
    } 
+0

私はこれをC#でセレンを使用して、学習の練習と同じようにしたいと思います。私は、 "Send InMail"ボタンに関連するリンクを印刷したいと思います。 'var mailLinks = driver.FindElementsByLinkText(" Send InMail ");と ' Console.WriteLine(mailLinks); 'は、私が望んでいるhrefリンクを返しません。これはコンソールに:_System.Collections.ObjectModel.ReadOnlyCollection'1 [OpenQA.Selenium.IWebElement] _ – user3157868

+0

OK ...私はあなたの提案(2tの)から.getAttribute( "href")を使用し、それは印刷させる実際のリンク – user3157868

+0

私はちょうどセレンでC#のみを使用してすべてのリンクを印刷する方法を知りたいです – user3157868

関連する問題