如何单击Web元素中的随机链接

时间:2016-08-23 15:20:05

标签: java selenium testing

我目前正在Selenium接受培训。该任务的目标是:

  1. 导航到随机的维基百科页面
  2. 从页面的类别列表中选择一个随机类别
  3. 从所选类别的网页列表中选择随机文章
  4. 输出原始随机页面和第二个类别的类别之间的比较差异。
  5. 我已经一直到了类别页面,但由于某种原因,代码不会点击该页面中的随机文章。

    以下是我目前的类别页面代码

            //Navigating to the category list at the bottom of the page
            WebElement Category = driver.findElement(By.id("mw-normal-catlinks"));
            Category.click();
            //finds a random link in the category list
            Random r = new java.util.Random();
            List<WebElement> links = driver.findElements(By.xpath("//div[@class = 'mw-category']"));    
            //picks a random link
            WebElement randomElement = links.get(r.nextInt(links.size()));
            randomElement.click();
    
            WebElement newCategory = driver.findElement(By.xpath("//div[@class= 'mw-category-generated']//div[@class= 'mw-category']"));
            newCategory.click();
            Random n = new java.util.Random();
            List<WebElement> ArticleLinks = driver.findElements(By.xpath("//div[@class= 'mw-category-generated']//div[@class= 'mw-category']"));
            WebElement randomElement2 = articleLinks.get(n.nextInt(articleLinks.size()));
            randomElement2.click();
    

2 个答案:

答案 0 :(得分:0)

代码似乎很好。我不确定为什么它不起作用。您可能正在通过randomElement和randomElement2查找随机元素,但您正在单击元素。请添加以下代码行,然后它将起作用。 randomElement.click() randomElement2.click()

答案 1 :(得分:0)

我在这里看到几个问题:

List<WebElement> links = driver.findElements(By.tagName("mw-pages"));

您确定实际链接是标记mw-pages吗?如果您不确定,请查看HTML。它是否显示:

<mw-pages></mw-pages>

如果没有,那么你可能正在寻找一个班级或一个ID。在这种情况下,您需要使用这些选择器策略。

另一个问题:

By.tagName("//div[@class= 'mw-category-generated']//div[@class= 'mw-category']")

您指定的字符串不是标记名称。同样,如上所述,By.tagName正在寻找<tag-name>。这个选择器策略显然是一个XPath,所以使用

By.xpath("//div[@class= 'mw-category-generated']//div[@class= 'mw-category']")

另外,放弃PascalCasing对象的习惯。 Java是camelCased,而不是PascalCased。这与你的问题无关,但我认为值得建议。

WebElement category; // not WebElement Category;
List<WebElement> articleLinks; // not List<WebElement> ArticleLinks;