Selenium - 如何点击此span类

时间:2014-11-18 21:42:09

标签: java html testing selenium-webdriver automation

我无法在此span类中使用xpath。我需要点击链接。

<span class="nav-selection">Ad Style</span>

我一直在尝试使用这种方法:

WebElement heightClass = driver.findElement(By.xpath("/html/body/div[3]/div/div[1]/div[2]/ul/li[3]/a/span"));

我需要测试的部分的html代码。

<ul class="nav nav-side-menu" style="top: 0px;">
        <li class="shadow-layer"></li>
        <li>
            <a href="portal.do?portalCategory=analyst">
                <i class="icon-photon dashboard"></i>
                <span class="nav-selection">Dashboard</span>
                                </a>
        </li>

        <li>
            <a href="javascript:;" class="sub-nav-container">
                <i class="icon-photon adcorner"></i>
                <span class="nav-selection">Ad Corner</span>
                <i class="icon-menu arrow"></i>                </a>
            <div class="sub-nav adCorner">
                <ul class="nav">

                    <li class="menu-add">
                        <a href="showstatusreports.do">Status Reports</a>
                    </li>


                    <li class="menu-add">
                        <a href="listinsertion.do">Insertion Order</a>                              
                    </li>
                    <li class="menu-add">
                        <a href="campaignWrapper.do?processpath=defaultPage&amp;camStatus=L">Campaigns</a>

                        <i class="icon-add" title="create new campaign" rel="createCampaign"></i>   

                    </li>






                    <li class="menu-add">
                        <a href="campaigncreatepage.do">Tags</a>                            
                    </li>







                        <li class="menu-add">
                        <a href="viewcreative.do">View Creative</a>
                        </li>


                </ul>
            </div>
        </li>

感谢您的帮助!请告诉我。

这就是我在日食中写的内容。请仔细阅读并告诉我。感谢。

//class to run the test
public class AddNewCampaign extends TestLogin{

    WebDriver driver;

public static void main(String[] args) {

    AddNewCampaign addCamp = new AddNewCampaign();
    addCamp.LaunchParisUI();
    addCamp.loginCredentials();
    addCamp.addCampaign();


}

//method to add campagin

    public void addCampaign() { 

            WebElement heightclass = driver.findElement(By.xpath("//*[.='Ad Corner']/.."));

            WebElement linkCampaigns = driver.findElement(By.xpath("/html/body/div[3]/div/div[1]/div[2]/ul/li[3]/div/ul/li[3]/a"));

            WebDriverWait wait = new WebDriverWait(driver, 10);

            Actions builder = new Actions(driver);
            builder.moveToElement(heightclass).perform();
            wait.until(ExpectedConditions.visibilityOf(linkCampaigns));
            builder.moveToElement(linkCampaigns).click().perform();

        }

//class the launch the url

    public class LaunchParis{

        WebDriver driver;

        //Launch PairsUI    
        public void LaunchParisUI() {
            driver = new FirefoxDriver();
            //driver = new ChromeDriver();
            driver.get("https://xfpqa1uiadm1");
            driver.manage().window().maximize();
            }

3 个答案:

答案 0 :(得分:1)

根据您发布的非常有限的信息,您可能想要:

driver.findElement(By.xpath("//span[@class='nav-selection']/parent::a"));

使用类span查找nav-selection元素,然后转到该元素的父锚点。跨度很少可点击,锚点是你想要点击的。

答案 1 :(得分:1)

以下可以是另一种选择。在点击之前,你要确保你让元素加载。这是基于文本的搜索。并且,绕过具有相同类名或属性值的元素的好方法

WebElement heightClass = driver.findElement(By.xpath("//*[.='Ad Corner']/.."));

答案 2 :(得分:1)

问题是您有两个driver个实例。您在AddNewCampaign中有一个实例。您在driver中有另一个LaunchParis实例。

所以你在LaunchParis中没问题,因为你已经创建了一个本地driver,然后用它来加载带有driver.get()的网页。之后,您将返回main,该driver仍有未实例化的WebDriver driver

我不确定您的代码是如何构建的。您可以通过从LaunchParis删除driver定义来清除此问题,或者您可能需要将LaunchParis传递给public class LaunchParis{ WebDriver localDriver; //Launch PairsUI public void LaunchParisUI(WebDriver driver) { localDriver = driver; localDriver = new FirefoxDriver(); //localDriver = new ChromeDriver(); localDriver.get("https://xfpqa1uiadm1"); localDriver.manage().window().maximize(); }

所以,可能是这样的:

addCamp.LaunchParisUI(driver);

你会这样称呼它:

localDriver = driver

我不完全确定它在Java中是如何工作的,即如果分配AddNewCampaign也会设置driver的{​​{1}}实例。