我目前正在Selenium接受培训。该任务的目标是:
我已经一直到了类别页面,但由于某种原因,代码不会点击该页面中的随机文章。
以下是我目前的类别页面代码
//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();
答案 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;