代码之家  ›  专栏  ›  技术社区  ›  Selrac

Selenium“找不到元素”

  •  0
  • Selrac  · 技术社区  · 8 年前

    我知道有几个问题与此类似。我想我已经经历了,但我找不到解决问题的方法。

    问题如下。我正在尝试使用Selenium驱动程序单击“https:/unsplash”上的图标/按钮。将显示从单网格更改为多网格的网站。

    图标的HTML标记如下:

    <svg class="N1Ri-" version="1.1" viewBox="0 0 32 32" 
        width="32" height="32" aria-labelledby="icon-title-635 
        icon-desc-636" aria-hidden="false" data-reactid=".pm6nw1xm9s.4.0.0.3.0.0.0.0.1.0">
    <path d="M0 2v10c0 1.106 0.896 2 2 
        2h10c1.104 0 2-0.894 2-2v-10c0-1.106-0.896-2-2-2h-10c-1.104 0-2 
        0.894-2 2zM2 18c-1.104 0-2 0.894-2 2v10c0 1.106 
        0.896 2 2 2h10c1.104 0 2-0.894 2-2v-10c0-1.106-0.896-2-2-2h-10zM20 18c-1.106 0-2 
        0.894-2 2v10c0 1.106 0.894 2 2 2h10c1.106 0 2-0.894 2-2v-10c0-1.106-0.
        894-2-2-2h-10zM20 0c-1.106 0-2 0.894-2 2v10c0 1.106 
        0.894 2 2 2h10c1.106 0 2-0.894 2-2v-10c0-1.106-0.894-2-2-2h-10z" 
        data-reactid=".pm6nw1xm9s.4.0.0.3.0.0.0.0.1.0.1">
    </path>
    </svg>
    

    我拥有的java代码如下:

        public static void main(String[] args) {
    System.setProperty("webdriver.gecko.driver","/home/ xxxx /Documents/Selenium/geckodriver");
        WebDriver driver = new FirefoxDriver();
        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        driver.get("https:/unsplash.com/");
    
        //I've tried all of the following independently with the same result: 'Unable to locate element'
        driver.findElement(By.className("N1Ri")).click();
        driver.findElement(By.className("N1Ri-")).click();
        driver.findElement(By.className("svg.Hd1sr")).click();
        driver.findElement(By.xpath("//a[contains(@class,'N1Ri')]")).click();
        driver.findElement(By.xpath("//*[@id='svg.Hd1sr']")).click();
    }
    

    正如您将在代码中看到的,我尝试了一系列选项(我尝试了许多其他组合),但结果总是一样:无法定位元素

    我还尝试了Senenium IDE,当点击图标/按钮时,消息来源显示:LOCATOR DETECTION FAILED(定位器检测失败)

    我猜HTML代码中有一些东西可以防止轻易地刮掉页面。

    -在这种情况下,我必须使用什么代码? -(最重要的)我如何找到在这种情况下使用的代码?

    谢谢

    2 回复  |  直到 8 年前
        1
  •  1
  •   Grasshopper    8 年前

    尝试此xpath

    ("//a[contains(@href,'multi')]/*[@class='Hd1sr']")
    

    带有svg标记的xpath失败。

    或css

    "a[href*='multi']>svg[class='Hd1sr']"
    
        2
  •  0
  •   Jsmith2800    8 年前

    尝试:

    driver.findElement(By.cssSelector("svg.N1Ri-")).click();
    

    由于某些原因,与此等价的xpath无法工作,恐怕我不知道为什么。