2016-09-07 12 views
-1

私はセレンを学んでいるので、ここに私のコードがあります(私はこれを何時間も見つけました。私の最初の質問ですので、私の質問に答えてください)。それはChromeブラウザを起動し、www.google.hrに行く。searchbarのsthを押す。enterを押す。次に、WebPageObjectにオーガニック検索結果と広告検索結果を保存し、次のページボタンをクリックしてプロセスを繰り返す。このコードは、driver = new ChromeDriver()をインスタンス化すると動作します。この場合はドライバ=新しいChromeDriver(オプション);では使用できません。コンストラクタのオプションを使用すると、最初の検索結果ページに移動し、同じページを3回保存します。デバッグモードでは、私は見て、WPOには正しいURLとすべてを持つIWebElement NextPageButtonがあります。ChromeOptionsの読み込み時にSelenium Click()が機能しない

public static IWebDriver driver; 
List<WebPageObject> WPOList = new List<WebPageObject>(); 
private void Form1_Load(object sender, EventArgs e) 
{ 
    ChromeOptions options = new ChromeOptions(); 
    options.AddArguments("user-data-dir=C:/Users/Smirglpapir/AppData/Local/Google/Chrome/User Data"); 
    options.AddArguments("--start-maximized"); 
    driver = new ChromeDriver(options); 
    driver.Navigate().GoToUrl("http://www.google.hr"); 
    IWebElement seacrhBarElement = driver.FindElement(By.Name("q")); 
    seacrhBarElement.SendKeys("What is the purpouse of life"); 
    seacrhBarElement.SendKeys(OpenQA.Selenium.Keys.Enter); 
    for (int i = 0; i < 3; i++) 
    { 
     Thread.Sleep(4000); // this fixes million errors 
     WebPageObject WPO = new WebPageObject(); // Saves 
     WPOList.Add(WPO); 
     Thread.Sleep(500); 
     WPO.nextButton.Last().Click(); // last because it clicks the previous button . 
    } 

    class WebPageObject 
    { 
     public string URL { get; set; } 
     public List<IWebElement> nextButton { get; set; } 
     public List<string> organicSearchResults { get; set; } 
     public List<string> stText { get; set; } 

     private List<IWebElement> organicSRElementList = new List<IWebElement>(); 
     public WebPageObject() 
     { 
      //gets the next button 
      nextButton = Form1.driver.FindElements(By.Id("pnnext")).ToList(); 
      // saves the href 
      URL = nextButton.Last().GetAttribute("href"); 
      // saves the IWebelements of organic seacrh results 
      organicSRElementList = Form1.driver.FindElements(By.ClassName("rc")).ToList(); 
      // stores searchresults in organicSearchResults property (List<string>) 
      SaveSearchResults();    
     } 

     private void SaveSearchResults() 
     { 
      stText = new List<string>(); 
      organicSearchResults = new List<string>(); 
      foreach (IWebElement IwebEl in organicSRElementList) 
      { 
       organicSearchResults.Add(IwebEl.Text); 
       stText.Add(IwebEl.FindElement(By.ClassName("st")).Text); 
      } 
     } 
    } 
} 

多分、私はこの質問を複雑にしましたが、このコードもうまくいきません。

private void Form1_Load(object sender, EventArgs e) 
{ 
    ChromeOptions options = new ChromeOptions(); 
    options.AddArguments("--user-data-dir=C:\\Users\\Smirglpapir\\AppData\\Local\\Google\\Chrome\\User Data"); 
    IWebDriver driver = new ChromeDriver(options); 
    driver.Navigate().GoToUrl("http://www.google.hr"); 
    IWebElement seacrhBarElement = driver.FindElement(By.Name("q")); 
    seacrhBarElement.SendKeys("What is the purpouse of life"); 
    seacrhBarElement.SendKeys(OpenQA.Selenium.Keys.Enter); 

    Thread.Sleep(4000); 
    var nextButton = driver.FindElements(By.Id("pnnext")); 
    nextButton.Last().Click(); 
    Thread.Sleep(4000); 
    nextButton = driver.FindElements(By.Id("pnnext")); 
    Thread.Sleep(4000); 
    nextButton.Last().Click(); 
} 

それは私が解決策見つけ

+1

ここでは、 'WebPageObject'のコードが役に立ちます。 – sokkyoku

+0

ありがとう、申し訳ありませんが、初心者です – Jones

答えて

0

同じページにとどまる:代わりのを

options.AddArguments("--user-data-dir=C:\\Users\\Smirglpapir\\AppData\\Local\\Google\\Chrome\\User Data"); 
あなたはちょうどこのようにユーザデータの後に例john_doeなどのために追加

options.AddArguments("--user-data-dir=C:\\Users\\Smirglpapir\\AppData\\Local\\Google\\Chrome\\User Data\\John_Doe"); 

クロムは自動的にあなたのプロファイルを作成します。なぜ私が本当に知りませんデフォルトのプロファイルで動作しません。

関連する問題