首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用xpath在元素TableHeader下面定位

如何使用xpath在元素TableHeader下面定位
EN

Stack Exchange QA用户
提问于 2017-07-12 06:06:11
回答 2查看 1.9K关注 0票数 0

我想在给定的DOM中定位元素'TableHeader‘,我使用的是XPath,但是异常无法找到元素。

代码语言:javascript
复制
Xpath : //div[@class='PageContent']/table[1]/tbody/tr/td[2]

如果我的XPath有什么问题,请看一看:

DOM:

代码语言:javascript
复制
<form> 
  <table id="topNavigation" cellspacing="0" cellpadding="0" border="0" width="100%"> 
    <div class="PageContent"> 
      <table cellspacing="0" cellpadding="0" border="0" width="100%"> 
        <tbody> 
          <tr> 
            <td class="TableLeftCor"/>
            <td class="TableHeader"> Main </td> 
            <td class="TableRightCor"/>
          </tr> 
        </tbody>
      </table> 
      <table cellspacing="0" cellpadding="0" border="0" width="100%">
      <div id="copyright"> 
      </div> 
</form>

我有两页的课:

LandingPage.java:

代码语言:javascript
复制
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;

public class LandingPage extends BasePage {

    public LandingPage(WebDriver driver) {
        super(driver);
        // TODO Auto-generated constructor stub
    }

    @FindBy(name = "username")
    private WebElement usernameTextbox;

    @FindBy(name = "password")
    private WebElement passwordTextbox;

    @FindBy(name = "submit")
    private WebElement loginButton;

    public MainPage login(String usrname, String passwd) throws InterruptedException{
        usernameTextbox.sendKeys(usrname);
        passwordTextbox.sendKeys(passwd);
        loginButton.click();
        loginButton.click();
        TimeUnit.SECONDS.sleep(3);
        System.out.println(driver.getCurrentUrl());
        return new MainPage(driver);
    }

}

MainPage.java

代码语言:javascript
复制
package pageClasses;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;

public class MainPage extends BasePage {

    public MainPage(WebDriver driver) {
        super(driver);
        // TODO Auto-generated constructor stub
    }

    @FindBy(className = "TableHeader")
    private WebElement pageHeader;

    public void testMainPage(){
        System.out.println("inside main page");
        System.out.println(pageHeader.getText());
    }
}
EN

回答 2

Stack Exchange QA用户

发布于 2017-07-12 06:14:34

如果没有必要的话,不要使用XPath。

您的选择器可以非常简单,如:

代码语言:javascript
复制
By.ClassName("TableHeader")

或者如果页面中有多个这样的表,

代码语言:javascript
复制
By.CssSelector(".PageContent .TableHeader")

如果您必须使用XPath,那么最简单的等效方法是:

代码语言:javascript
复制
By.XPath("//td[@class='TableHeader']")
票数 0
EN

Stack Exchange QA用户

发布于 2017-07-12 08:49:05

以下是一些替代办法:

css:#topNavigation tbody td + td

css:#topNavigation table tbody td + td

css:#topNavigation tbody td.TableHeader

css:#topNavigation table tbody td.TableHeader

xpath://table[@id='topNavigation']//tbody//td[2]

xpath://table[@id='topNavigation']//table/tbody//td[2]

xpath://table[@id='topNavigation']//tbody//td[@class='TableHeader']

票数 0
EN
页面原文内容由Stack Exchange QA提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://sqa.stackexchange.com/questions/28497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档