0

我正在尝试在 Google 中搜索 Selenium,然后通过单击每个链接来运行链接列表,打印页面标题,然后导航回来。

List<WebElement> linkElements = driver.findElements( **<insert code here>** );

for(WebElement elem: linkElements)
{
    String text = elem.getText();
    driver.findElement(By.linkText(text)).click();
    System.out.println("Title of link\t:\t" + driver.getTitle());
    driver.navigate().back();
}

为了找到元素,我尝试了 By.tagName("a") ,它不起作用,因为它获取所有链接,而不仅仅是搜索链接。使用 Firebug,我看到每个搜索链接都有一个在标题 h3 上使用的 r 类,以及嵌套在其中的 a 标记。

请参阅以下内容:

<h3 class="r">
<a href="/url sa=t&amp;rct=j&amp;q=selenium&amp;source=web&amp;cd=1&amp;cad=rja&amp;ved=0CC8QFjAA&amp;url=http%3A%2F%2Fseleniumhq.org%2F&amp;ei=y4eNUYiIGuS7iwL-r4DADA&amp;usg=AFQjCNHCelhj_BWssRX2H0HZCcPqhgBrRg&amp;sig2=WBhmm65gCH7RQxIv9vgrug&amp;bvm=bv.46340616,d.cGE" onmousedown="return rwt(this,'','','','1','AFQjCNHCelhj_BWssRX2H0HZCcPqhgBrRg','WBhmm65gCH7RQxIv9vgrug','0CC8QFjAA','','',event)"><em>Selenium</em> - Web Browser Automation
</a></h3>

我可以插入什么代码来完成这项工作?

4

3 回答 3

0

试试下面的新代码

    WebDriver driver;
    driver = new FirefoxDriver();
    driver.get("http://www.google.com");
    driver.findElement(By.id("gbqfq")).sendKeys("Selenium");
    Thread.sleep(1500L);
    driver.findElement(By.id("gbqfb")).click();
    Thread.sleep(1500L);
    List<WebElement> linkElements = driver.findElements(By.xpath("//h3[@class='r']/a"));
     for(int i=0;i<=linkElements.size();i++)
        {
            String text = linkElements.get(i).getText();
            driver.findElement(By.linkText(text)).click();
            Thread.sleep(2000L);
            System.out.println("Title of link\t:\t" + driver.getTitle());
            Thread.sleep(2000L);
            driver.navigate().back();
            linkElements = driver.findElements(By.xpath("//h3[@class='r']/a"));

        } 
于 2013-05-11T06:11:11.347 回答
0

你有很多解决方案。有我的。你保持你的方式喜欢

// You get all links in a list
List<WebElement> linkElements = driver.findElements(By.xpath("//h3/a"));

// for each element(link) you click() on it
for(WebElement elem: linkElements)
{
  elem.click(); 
  // i suggest to put a wait right there
  System.out.println("Title of link\t:\t" + driver.getTitle());
  driver.navigate().back();
}

我不知道你为什么要复杂化getText()等等。

于 2013-05-13T06:57:23.673 回答
0

尝试搜索此选择器:

    '.g:nth-child('+clickPosition+') h3.r a'

其中“clickPosition”是 SERP 结果数组键。不过要小心,谷歌现在实现了一个“onmousedown”事件,它将把 href 属性更改为他们的重定向。

于 2013-11-21T21:29:42.933 回答