2017-08-28 5 views
2

Für ein meine Tests, ich brauche einen Bootstrap-Schaltknopf zu drücken, hat es die folgenden html:Wie man einen Bootstrapschalter mit Selenium Java Webdriver umstellt?

<div class="bootstrap-switch-container" style="width: 93px; margin-left: -31px;"> 
    <span class="bootstrap-switch-handle-on bootstrap-switch-primary" style="width: 31px;">ON</span> 
    <span class="bootstrap-switch-label" style="width: 31px;">11111&nbsp;</span> 
    <span class="bootstrap-switch-handle-off bootstrap-switch-default" style="width: 31px;">OFF</span> 
    <input name="form:taskDone" id="input_form:taskDone" type="checkbox"> 
</div> 

Ich versuchte

By TASK_DONE_SWITCH_LOCATOR = By.id("input_form:taskDone"); 
taskDoneSwitch = wait.until(ExpectedConditions.elementToBeClickable(TASK_DONE_SWITCH_LOCATOR)); 
taskDoneSwitch.click(); 

Dann mit mir die folgenden Ausnahme erhalten:

Timed out after 5 seconds 
Build info: version: '2.8.0', revision: '14056', time: '2011-10-06 15:53:48' 
System info: os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.12.6', java.version: '1.8.0_131' 
Driver info: driver.version: unknown 
org.openqa.selenium.TimeoutException 
    at org.openqa.selenium.support.ui.FluentWait.timeoutException(FluentWait.java:220) 
    at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:188) 
    at hu.dual.webapp.customerservice.note.AbstractNoteTest.refreshEditPageTaskElements(AbstractNoteTest.java:161) 
    at hu.dual.webapp.customerservice.note.EditNoteTest.setTaskToDone(EditNoteTest.java:76) 

Die Stacktrace Punkte auf dieser Linie:

taskDoneSwitch = wait.until(ExpectedConditions.elementToBeClickable(TASK_DONE_SWITCH_LOCATOR)); 

Und dann klickt es nicht. Wie kann ich darauf klicken? Ich habe versucht, die anderen Felder und die ExpectedConditions.visibilityOfElementLocated zu verwenden, aber ich konnte immer noch nicht darauf klicken.

Antwort

2

Die : in Das ID-Attribut könnte das Problem verursachen. Versuchen Teil id

By TASK_DONE_SWITCH_LOCATOR = By.cssSelector("[id*='input_form']"); 

Oder

By TASK_DONE_SWITCH_LOCATOR = By.cssSelector("[id*='taskDone']"); 

oder beide

By TASK_DONE_SWITCH_LOCATOR = By.cssSelector("[id*='input_form'][id*='taskDone']"); 

Edit

Sie auch auf das übergeordnete Element zu klicken versuchen können, verwenden

By.className("bootstrap-switch-container"); 
+0

Dies wirft keine Ausnahme, aber nicht auf die Knopf entweder! Danke für ihre Aufmerksamkeit! – brightpants

+1

@brightpants Vielleicht müssen Sie auf ein anderes Element klicken? wie 'By.className (" bootstrap-switch-primary ");' oder 'By.className (" bootstrap-switch-default ");' – Guy

+0

Ich habe beide versucht, aber die Nachrichten waren: unbekannter Fehler: Element ... kann nicht an Punkt geklickt werden (218, 686). Anderes Element würde den Klick erhalten:

...
brightpants

1

können Sie versuchen, die Wartezeit von 5 bis 30 zu erhöhen

Wenn noch nicht mit folgendem Code arbeiten versuchen:

WebElement taskDoneSwitch = driver.findElement(TASK_DONE_SWITCH_LOCATOR); 
JavascriptExecutor executor = (JavascriptExecutor)driver; 
executor.executeScript("arguments[0].click();", taskDoneSwitch); 

Hoffen, es werden Ihnen helfen :)

+0

gut, 30s hat es nicht gelöst, und der Code, den Sie vorgeschlagen, gibt mir diese Ausnahme: unbekannter Fehler: Runtime.evaluate warf Ausnahme: SyntaxError: Unerwartetes Token: – brightpants

Verwandte Themen