C # Selenium, как получить все ссылки в списке и нажать случайно - PullRequest
0 голосов
/ 11 ноября 2019

Я хотел бы получить ссылки на свой список, который я уже видел на своей странице.

Но есть одно обстоятельство, это будут только подходящие ключевые слова со ссылками, которые должны быть в списке. Например, если его abc.com, он должен получить только abc.com links. Таким образом, это означает, что существует no external link.

. После этого следует случайно щелкнуть ссылки , которые я получаю из списка.

В основном;нажмите случайную ссылку на странице.

  • Выберите все интернет-ссылки на странице
  • Нажмите случайную ссылку
  • Повторите

Ответы [ 2 ]

1 голос
/ 12 ноября 2019

Если я правильно понимаю, вы хотите метод, в котором вы можете передать конкретную ссылку в качестве параметра, если не передана ссылка, вы должны нажать случайную ссылку из списка.

Пожалуйста, посмотрите примерреализация ниже.

   //Click one link randomly
    private void ClickRandomLink(string linkText = null)
    {
       //get all links
        var links = _driver.FindElements(By.TagName("a")).ToList();

        if (!string.IsNullOrEmpty(linkText))
        {
            var link = links.FirstOrDefault(x => x.GetAttribute("href").Equals(linkText)) ??
                       throw new Exception($"Link with name: {linkText} not found");
            link.Click();
        }
        else
        {
            //click random element in list
            links.ElementAt(new Random().Next(0, links.Count - 1)).Click();
        }
     }

Нажмите все доступные ссылки случайным образом

    private void ClickRandomLinks(string linkText = null)
    {
        //get all links
        var links = _driver.FindElements(By.TagName("a")).ToList();

        //click all links matching predicate
        if (!string.IsNullOrEmpty(linkText))
        {
            var linkElements = links.Where(x => x.GetAttribute("href").Contains(linkText)).ToList();
            if(!linkElements.Any()) throw new Exception($"Links with name: {linkText} not found");

            //Generate random order
            var randomElements = Enumerable.Range(0, linkElements.Count-1).OrderBy(x => Guid.NewGuid()).ToList();
            randomElements.ForEach(x => linkElements.ElementAt(x).Click());
        }
        else
        {
            //click all links randomnly
            var randomElements = Enumerable.Range(0, links.Count-1).OrderBy(x => Guid.NewGuid()).ToList();
            randomElements.ForEach(x => links.ElementAt(x).Click());                
        }
    }

Надеюсь, это поможет.

1 голос
/ 11 ноября 2019

Создайте список веб-элементов с элементами, которые вы нашли на странице со ссылками. Затем создайте другой список с действительным списком abc.com и заполните его правильными ссылками. Утверждают, что длина обоих списков равны. Затем создайте случайное число, выберите индекс списка веб-элементов (LinkElements), затем щелкните этот элемент.

List<WebElement> LinkElements = driver.FindElements(By.Id(“element id”));

List<string> ValidLinks = new List<string>();  

foreach(WebElement LinkElement in LinkElements){
  string LinkString = LinkElement.GetAttribute("href");
  if(Equals("abc.com", LinkString.SubString(0, 7))){
    ValidLinks.Add(LinkString);
    }
}

CollectionAssert.AreEquivalent(Links.Count, ValidLink.Count);

Random r = new Random();
LinksElements[r.Next(0,LinksElements.Count)].Click();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...