【问题标题】:WebDriver with Java - click to open a link using xpath带有 Java 的 WebDriver - 单击以使用 xpath 打开链接
【发布时间】:2013-05-19 14:24:09
【问题描述】:

我想在网页上打开一个链接。该链接似乎位于标签中的无序列表中。网页的 url 是 selftechy dot com。标签是 home,about,selenium。

我尝试使用 driver.findElement(By.linkText("Selenium")); 打开链接,但页面似乎失去了样式。我也尝试过使用 xpath 方法,但它也不起作用。请向我解释为什么它不起作用以及我应该如何修改代码以使其正常工作。感谢您的帮助。

HTML 代码片段:

<body class="custom">
<div id="container">
<div id="page">
<ul class="menu">
<li class="tab tab-home current"><a href="http://selftechy.com">Home</a></li>
<li class="tab tab-1"><a href="http://selftechy.com/about" title="About">About</a></li>
<li class="tab tab-2"><a href="http://selftechy.com/selenium-2" title="Selenium">Selenium</a></li>
</ul>

打开链接的webdriver代码

import java.util.List;
import java.util.concurrent.TimeUnit;
import org.junit.*;

import org.junit.Before;
import org.junit.After;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

public class selftechyTestng 
{
    private WebDriver driver;
    private String baseUrl;

    @Before
    public void setUp() throws Exception
    {
        driver = new FirefoxDriver();
        baseUrl = "http://selftechy.com/";
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    }
    @Test
    public void searchElements() throws Exception{
        driver.get(baseUrl);

            //use By.linkText method the page lost its styling
            driver.findElement(By.linkText("Selenium"));

        //use xpath method to open the link doesn't work either 
        List<WebElement> elements = driver.findElements(By.xpath("//div[@id=page]/*[3]")).click(); 
        driver.findElement(By.xpath("//div[@id=page]/*[3]")).click(); 
    }

}

【问题讨论】:

  • 您的 xpath 可能有问题。在尝试调试您的 webdriver 脚本之前,请尝试使用 firepath 确认您的 xpath 确实可以识别您的屏幕元素。

标签: java xpath selenium-webdriver webdriver


【解决方案1】:

为什么要先搜索 div 再搜索子元素 - 有什么特别的原因吗?我没有看到任何优势,当然您也没有得到您真正想要单击的 a 元素。在我看来,使用起来要简单得多

driver.findElement(By.xpath("//a[@title = 'Selenium']")).click();

使用你必须使用的方法

driver.findElement(By.xpath("//div[@id = 'page']/ul/li[3]/a")).click(); 

【讨论】:

  • 感谢您的回复。您的两个解决方案都有效。我看到 @ 用于选择 HTML 标记中的属性。
  • @dirkk:如果标题在 html 中不能作为属性使用,您将如何识别相同的内容。
  • @KrishnaChandraTiwari 如果您有新问题,请提出一个实际的新问题。在 cmets 中解决这个问题太难了,因为这完全取决于你的 HTML 的样子——你可能没有 title 属性,但你肯定有 something else 来识别元素。跨度>
【解决方案2】:

你也可以使用这个 xpath:

"//a[text()='Selenium']"

这将找到带有 text = Selenium 的链接

【讨论】:

    【解决方案3】:

    以下代码将在新窗口中打开链接并打印新打开窗口的标题和网址。

        String defaultwindow = "";
    @Test(description="Main Page")
    public void UserOnMainPage()
    {
            driver.get("http://yoururl.com");
            defaultwindow = driver.getWindowHandle();
            String selectAll = Keys.chord(Keys.SHIFT,Keys.RETURN);
            driver.findElement(By.linkText("linkname")).sendKeys(selectAll);
            printTitleandUrlofNewlyOpenedwindow();
    }
    
    private void printTitleandUrlofNewlyOpenedwindow() 
    {
            Set<String> windowHandles1 = driver.getWindowHandles();
            int size = windowHandles1.size();
            System.out.println(size); 
            for (String string : windowHandles1) 
            {
               driver.switchTo().window(string);
    
               if(string.equals(defaultwindow))
               {
                   System.out.println("On Main Window");
                   Reporter.log("On Main Window");
               }
               else
               {
                   String title=driver.getTitle();
                   System.out.println(title);
                   Reporter.log(title);  
                   String recipeUrl = driver.getCurrentUrl();
                   System.out.println(recipeUrl);     
                   Reporter.log(recipeUrl);
    
               }
           }
           driver.switchTo().window(defaultwindow);
    }
    

    【讨论】:

      【解决方案4】:

      以下代码将在新标签中打开链接。

      String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,Keys.RETURN); driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);

      【讨论】:

        猜你喜欢
        • 2016-06-16
        • 2012-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-26
        • 2013-10-04
        相关资源
        最近更新 更多