【问题标题】:Selenium - How do click on this span classSelenium - 如何点击这个跨度类
【发布时间】:2015-01-16 05:59:45
【问题描述】:

我无法为这个 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>

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

这就是我在 Eclipse 中写的。请仔细阅读并告诉我。谢谢。

//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();
            }

【问题讨论】:

  • 您遇到了什么问题?没有结果?例外?如果是异常,那是什么异常?顺便说一句,那个 xpath 相当脆弱。如果您编辑帖子并添加更多 html,可能有人会建议更好的选择器。
  • 线程“main”java.lang.NullPointerException中的异常
  • 嗨,理查德,我在原始帖子中添加了 html。谢谢
  • 我在您的 html 中没有看到广告样式,但我假设您正在搜索广告角。如果是这样,请参阅下面的答案
  • NullPointerException 可能意味着您正在访问的对象是null。你能发布更多你的代码吗?

标签: java html testing selenium-webdriver automation


【解决方案1】:

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

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

找到类nav-selectionspan 元素,然后转到该元素的父锚点。 Span 很少可点击,锚点就是你要点击的地方。

【讨论】:

  • 所以你的意思是你没有实例化driver?!?!
  • 这是可能的,但我认为问题会出现在driver.get(url)
【解决方案2】:

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

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

【讨论】:

  • 不走运 Saifur...仍然给我例外
  • 我认为理查德是正确的。你可能没有正确实例化
  • 我在上面添加了我试图运行的脚本。谢谢各位!
【解决方案3】:

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

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

我不确定您的代码的结构究竟如何。您可以通过从LaunchParis 中删除WebDriver driver 定义来解决此问题,或者您可能需要将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);

我不完全确定这在 Java 中如何工作,即如果分配 localDriver = driver 也会设置 driverAddNewCampaign 实例。

【讨论】:

  • 我需要弄清楚我是如何调用方法的。我创建了一个没有继承的新项目,xpath 似乎可以工作。谢谢你们的帮助,伙计们!
猜你喜欢
  • 1970-01-01
  • 2021-05-03
  • 2019-01-13
  • 1970-01-01
  • 2021-08-10
  • 2019-03-15
  • 2019-11-19
  • 2022-01-17
  • 1970-01-01
相关资源
最近更新 更多