2017-01-06 4 views
0

Сначала я создал код в Selenium IDE firefox addon, который очищает данные с сайта. Конечно, он работает правильно в IDE.Selenium C# - Не удалось найти элемент

Я хочу, чтобы очистить URL от этого:

<div class="gs-per-result-labels" url="http://example.com/foo/bar"></div> 

как HTML будет показано, как:

<tr> 
    <td>open</td> 
    <td>http://example.com</td> 
    <td></td> 
</tr> 

<tr> 
    <td>storeAttribute</td> 
    <td>//div[@class='gs-per-result-labels']@url</td> 
    <td>myValue</td> 
</tr> 

<tr> 
    <td>echo</td> 
    <td>${myValue}</td> 
    <td></td> 
</tr> 

Обе команды выполняются правильно и echo дает правильное значение. Затем я изменил формат на C#/NUnit/WebDriver, и я скопировал код в Visual Studio 2015. Я добавил FirefoxDriver и IWebDriver ссылок. То есть код:

private static IWebDriver driver; 
static void Main(string[] args) 
{ 
    driver = new FirefoxDriver(); 

    driver.Navigate().GoToUrl("http://example.com"); 
    Thread.Sleep(10000); 
    string myValue = driver.FindElement(By.XPath("//div[@class='gs-per-result-labels']")).GetAttribute("url"); 
} 

Я также добавил Sleep, чтобы убедиться, что страница полностью загружена, когда дело доходит до выскабливания значения. Дело в том, что я получаю ошибку на FindElement function, потому что driver не смог найти элемент. Мне интересно, почему это происходит. Все, кажется, одно и то же. Есть ли у вас какие-либо советы?

Я думаю, что стоит сказал: содержание, которое я хочу, чтобы очистить генерируется PHP или JavaScript (Thats являются результатом поиска Google на «пример» страницы, которая не Google)

+0

Ваш HTML образец не содержит 'div' s. Это намеренно? – Stuart

+0

Существует '// div [@ class = 'gs-per-result-labels']' –

+0

Так что XPath запрашивает XML, этот запрос '// div [@ class = 'gs-per-result-labels-labels']' будет найдите элементы 'div' с атрибутом' class' со значением '' gs-per-result-labels''. Он не будет выполнять обычный текстовый поиск тела HTML. – Stuart

ответ

0

Лучший подход будет проверьте, является ли Xpath абсолютно правильным. Вы всегда можете использовать Firebug или если вы хотите сделать это программно, ниже строки должны помочь

List<WebElement> existList=driver.FindElement(By.XPath("//div[@class='gs-per-result-labels']")); 
if(existList.size()>0){ 
    //SOPL("element present"); 
} 

Я хотел бы предложить вам использовать явное ожидание

WebDriverWait wait=new WebDriverWait (driver,60); 
wait.until(ExpectedConditions.visibilityOfElementLocated(By.XPath("//div[@class='gs-per-result-labels']"))); 
    string myValue = driver.FindElement(By.XPath("//div[@class='gs-per-result-labels']")).GetAttribute("url");