2016-02-04 2 views
0

По какой-либо причине щелчок по ссылке, похоже, не работает в Selenium WebDriver для меня, в то время как в Selenium IDE он работает нормально.Selenium Firefox Webdriver NoSuchElement Exception по ссылке:

Все другие материалы с копией в виде фрагментов, которые я построил на Selenium IDE для Selenium Webdriver, похоже, работают.

Исключение:

org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"css selector","selector":"a.mx-name-159b6aef-dbc3-5b23-a735-cf99f8341771-1-3"} 
Command duration or timeout: 10.10 seconds 
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html 
Build info: version: '2.50.1', revision: 'd7fc91b', time: '2016-01-29 19:04:49' 
System info: host: 'LT1736', ip: '10.54.3.175', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_71' 
Driver info: org.openqa.selenium.firefox.FirefoxDriver 
Capabilities [{applicationCacheEnabled=true, rotatable=false, handlesAlerts=true, databaseEnabled=true, version=43.0.4, platform=WINDOWS, nativeEvents=false, acceptSslCerts=true, webStorageEnabled=true, locationContextEnabled=true, browserName=firefox, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}] 
Session ID: 62532082-d8c1-4d22-8884-6e266449ca06 
*** Element info: {Using=css selector, value=a.mx-name-159b6aef-dbc3-5b23-a735-cf99f8341771-1-3} 

Код:

public class CRUD_Technologie { 
    public WebDriver driver;  

    @Test(priority=1) 
    public void openApp() { 
     driver.get("http://localhost:8080/index.html"); 
    } 

    @Test(priority=2) 
    public void login() { 
     driver.findElement(By.cssSelector("#usernameInput")).sendKeys("MxAdmin"); 
     driver.findElement(By.cssSelector("#passwordInput")).sendKeys("1"); 
     driver.findElement(By.cssSelector("#loginButton")).click(); 
    } 

    @Test(priority=3) 
    public void selectUserAndGoToPageTechnologieOverview() { 
     FluentWait<WebDriver> wait = new FluentWait<WebDriver>(driver).withTimeout(30, TimeUnit.SECONDS) 
       .pollingEvery(5, TimeUnit.SECONDS) 
       .ignoring(NoSuchElementException.class); 
     driver.findElement(By.cssSelector("div.mx-demouserswitcher-toggle")).click(); 
     driver.findElement(By.cssSelector("li[data-id='3']")).click(); 
     wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("a.mx-name-159b6aef-dbc3-5b23-a735-cf99f8341771-1-3"))).click(); 
    } 

    @Parameters("browser") 
    @BeforeTest 
    public void beforeTest(String browser) { 
     if(browser.equalsIgnoreCase("firefox")){ 
      driver = new FirefoxDriver(); 
     } 
     else { 
      driver = new HtmlUnitDriver(); 
     } 
     driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 

    } 

    @AfterTest 
    public void afterTest() { 
     driver.close(); 
    } 
} 

Соответствующий HTML ссылочной элемента:

<div id="mxui_widget_Navbar_0" class="navbar navbar-default mx-navbar mx-name-menuBar1 hidden-xs" tabindex="-1" data-mendix-id="150" style="background-color: black ! important;" widgetid="mxui_widget_Navbar_0"> 
<ul class="nav navbar-nav"> 
<li class="mx-navbar-item"> 
<a class="mx-name-159b6aef-dbc3-5b23-a735-cf99f8341771-0" href="#" data-item-id="159b6aef-dbc3-5b23-a735-cf99f8341771-0"> 
<span class="glyphicon glyphicon-home"/> 
Home 
</a> 
</li> 
<li class="mx-navbar-item dropdown"> 
<a class="mx-name-159b6aef-dbc3-5b23-a735-cf99f8341771-1" href="#" data-item-id="159b6aef-dbc3-5b23-a735-cf99f8341771-1"> 
<span class="glyphicon glyphicon-th-list"/> 
Master Data Mendix 
<b class="caret"/> 
</a> 
<ul class="dropdown-menu mx-navbar-submenu"> 
<li class="mx-navbar-subitem"> 
<a class="mx-name-159b6aef-dbc3-5b23-a735-cf99f8341771-1-0" href="#" data-item-id="159b6aef-dbc3-5b23-a735-cf99f8341771-1-0"> 
<span class="glyphicon glyphicon-euro"/> 
Rollen 
</a> 
</li> 
<li class="mx-navbar-subitem"> 
<a class="mx-name-159b6aef-dbc3-5b23-a735-cf99f8341771-1-1" href="#" data-item-id="159b6aef-dbc3-5b23-a735-cf99f8341771-1-1"> 
<span class="glyphicon glyphicon-modal-window"/> 
Scherm type 
</a> 
</li> 
<li class="mx-navbar-subitem"> 
<a class="mx-name-159b6aef-dbc3-5b23-a735-cf99f8341771-1-2" href="#" data-item-id="159b6aef-dbc3-5b23-a735-cf99f8341771-1-2"> 
<span class="glyphicon glyphicon-book"/> 
Story type 
</a> 
</li> 
<li class="mx-navbar-subitem"> 
<a class="mx-name-159b6aef-dbc3-5b23-a735-cf99f8341771-1-3" href="#" data-item-id="159b6aef-dbc3-5b23-a735-cf99f8341771-1-3"> 
<span class="glyphicon glyphicon-briefcase"/> 
Technologie 
</a> 
</li> 
</ul> 
</li> 
<li class="mx-navbar-item dropdown"> 
<a class="mx-name-159b6aef-dbc3-5b23-a735-cf99f8341771-2" href="#" data-item-id="159b6aef-dbc3-5b23-a735-cf99f8341771-2"> 
<span class="glyphicon glyphicon-th-list"/> 
Master Data AFAS 
<b class="caret"/> 
</a> 
<ul class="dropdown-menu mx-navbar-submenu"> 
<li class="mx-navbar-subitem"> 
<a class="mx-name-159b6aef-dbc3-5b23-a735-cf99f8341771-2-0" href="#" data-item-id="159b6aef-dbc3-5b23-a735-cf99f8341771-2-0"> 
<span class="glyphicon glyphicon-glass"/> 
Klanten 
</a> 
</li> 
<li class="mx-navbar-subitem"> 
<a class="mx-name-159b6aef-dbc3-5b23-a735-cf99f8341771-2-1" href="#" data-item-id="159b6aef-dbc3-5b23-a735-cf99f8341771-2-1"> 
<span class="glyphicon glyphicon-list-alt"/> 
Werkmaatschappij 
</a> 
</li> 
</ul> 
</li> 
</ul> 
</div> 
+1

пожалуйста, напишите HTML код отсутствия элемента –

+1

ли щелкать на «Ли [данные ID = '3' ] "запускать еще один AJAX? Если это так, вам нужно добавить неявное ожидание до последнего «a.mx-name-159b6aef ...» В любом случае ... это тот элемент, который не работает :) –

+0

ваше имя класса a.mx-name-159b6aef-dbc3- 5b23-a735-cf99f8341771-1-3 кажется динамичным. Когда селен создает новый сеанс и открывает веб-страницу, время, когда ваш css может быть изменен. Попробуйте использовать другую стратегию локатора (xpath, linktext или лучше css-локатор). –

ответ

1

(1) Прежде всего, вы не ждали того же элемента как вы это делаете с другими элементами

Пример: -

Вы поклонников: -

wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("li[data-id='3']"))).click(); 

Вы не ждали, попробуйте сделать similer, как вы делали в остальной части кода

driver.findElement(By.cssSelector("a.mx-name-159b6aef-dbc3-5b23-a735-cf99f8341771-1-3")).click(); 

(2) Если вы можно щелкнуть по IDE, используя тот же самый локатор CSS, а затем попытаться щелкнуть JavascriptExecutor.

JavascriptExecutor является интерфейсом, предоставляемый по Selenium WebDriver

if (driver.findElements(By.cssSelector("a.mx-name-159b6aef-dbc3-5b23-a735-cf99f8341771-1-3").size() != 0) { 
    WebElement element= driver.findElement(By.cssSelector("a.mx-name-159b6aef-dbc3-5b23-a735-cf99f8341771-1-3")) 
    JavascriptExecutor executor = (JavascriptExecutor) driver; 
    executor.executeScript("arguments[0].click();", element); 
} 
else{ 
      System.out.println("Element not present"); 
    } 

Надеется, что это поможет :)

+0

(2) заставило его работать. – Folatt

Смежные вопросы