2016-09-08 2 views
0

Я знаю, что есть несколько вопросов, подобных этим. Я думаю, что я прошел через них, но я не могу найти, как решить мою проблему.Selenium 'Не удалось найти элемент'

Проблема заключается в следующем. Я пытаюсь использовать драйвер Selenium, чтобы щелкнуть значок/кнопку на веб-сайте «https: /unsplash.com/», который меняет отображение из одной сетки в сетку.

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 и, когда звонил на иконку/кнопку, источник показал: LOCAT ИЛИ ОБНАРУЖЕНИЕ НЕИСПРАВНОСТИ

Я предполагаю, что в коде HTML есть что-то, что мешает легко соскабливать страницу.

Мои вопросы двоякие: - Каков код, который я должен использовать в этом случае? - (самое главное) Как я могу найти код для использования в таких случаях?

Благодаря

ответ

1

Попробуйте этот XPath

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

с SVG тег XPath не удается.

Или CSS

"a[href*='multi']>svg[class='Hd1sr']" 
+0

Спасибо Grasshopper, с xpath работал отлично. С css я снова получил ту же ошибку «Не удалось найти элемент». Но как вы определили код? почему вам нужно использовать @ href, 'multi', например? Я не могу понять, какой синтаксис использовать. Есть ли какой-нибудь справочный код, чтобы помочь в этом? – Selrac

+0

@Selrac Вы можете получить много ресурсов на google и youtube для xpath и css-локаторов для селена. Это довольно легко подобрать. Кроме того, вы можете установить firebug на firefox, и он автоматически предоставит вам локаторы. Но вам может потребоваться изменить их, чтобы они были идеальными. – Grasshopper

+0

Я буду продолжать пытаться. Практика делает совершенным. Но я попробовал сейчас, и это не сработало. Проверяя код html, я заметил, что он изменился и теперь, чтобы заставить его работать, я должен использовать: driver.findElement (By.xpath («// a [содержит (@ href, 'multi»)]/* [@ class = 'N1Ri -'] ")) нажмите();. Странно, что теперь я вижу N1Ri- и 8 часов назад я видел Hd1sr. – Selrac

0

Try:

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

По какой-то причине XPath эквивалентно это не будет работать, я боюсь, что я понятия не имею, почему.

+0

Благодаря JSmith. Несмотря на то, что код не вызывал ошибку, на самом деле это не помогло команде щелчка – Selrac