Активировать javascript на селене Webdriver

У меня есть программа с Java, и я использую Selenium WebDriver. Но мой скрипт не видит кнопку «Открыть доступ к устройству», потому что это «отображение: нет».

http://clip2net.com/s/53N136

Обычно, когда я нажимаю «Доступ к устройству», появляется кнопка «Открыть доступ к устройству» с JavaScript. Мой Firefox WebDriver не поддерживает JavaScript, как мне им управлять?

driver.get(baseUrl);
driver.findElement(By.id("username")).clear();
driver.findElement(By.id("username")).sendKeys("admin");
driver.findElement(By.id("password")).clear();
driver.findElement(By.id("password")).sendKeys("XXX");
driver.findElement(By.name("btnlogin")).click();
Thread.sleep(5000);
driver.findElement(By.xpath("//a[@href='/mybox/devices/overview.php']")).click();
Thread.sleep(5000);
driver.findElement(By.xpath("//a[@href='/mybox/devices/satellite.php']")).click();
Thread.sleep(5000);
WebElement element = driver.findElement(By.xpath("//input[@value='Open device access']"));
System.out.println("Element display (Avant accordéon): "+element.isDisplayed()+"");
driver.findElement(By.id("device_hmi_content_22")).click();
WebElement element2 = driver.findElement(By.xpath("//input[@value='Open device access']"));
System.out.println("Element display (open): "+element2.isDisplayed()+"");

if (isElementPresent(By.xpath("//input[@value='Close device access']")) ) {
    driver.findElement(By.xpath("//input[@value='Close device access']")).click();
    driver.findElement(By.xpath("//input[@value='Open device access']")).click();
    Thread.sleep(5000);
    assertTrue(isElementPresent(By.xpath("/html/body/div[2]/div[3]/div[3]/div[2]/div/div[2]/div[2]/div/div[6]/div/div/div/p/span")));
    assertTrue(isElementPresent(By.xpath("/html/body/div[2]/div[3]/div[3]/div[2]/div/div[2]/div[2]/div/div[6]/div/div/div[2]/input")));
    assertTrue(isElementPresent(By.xpath("/html/body/div[2]/div[3]/div[3]/div[2]/div/div[2]/div[2]/div/div[6]/div/div/div[2]/input[2]")));
    Thread.sleep(3000);
    driver.findElement(By.xpath("//input[@value='Close device access']")).click();
    Thread.sleep(5000);
} else {
    // driver.findElement(By.xpath("//input[@value='Open device access']")).click();
    // Thread.sleep(5000);
    // assertTrue(isElementPresent(By.xpath("/html/body/div[2]/div[3]/div[3]/div[2]/div/div[2]/div[2]/div/div[6]/div/div/div/p/span")));                        
    // assertTrue(isElementPresent(By.xpath("/html/body/div[2]/div[3]/div[3]/div[2]/div/div[2]/div[2]/div/div[6]/div/div/div[2]/input")));                      
    // assertTrue(isElementPresent(By.xpath("/html/body/div[2]/div[3]/div[3]/div[2]/div/div[2]/div[2]/div/div[6]/div/div/div[2]/input[2]")));                       
    // Thread.sleep(3000);
    // driver.findElement(By.xpath("//input[@value='Close device access']")).click();
    // Thread.sleep(5000);
}

Я не хочу программировать с помощью javascript, но я хочу активировать JavaScript в моем Firefox WebDriver.

Кнопки не видно:

<div id="device_hmi_content_22"> <
div id="accordion_device_hmi_22" class="accordion"> 
<h2 class="accHeadline accHeadlineClosed">Device Access</h2> 
<div class="accContent accContentClosed "> 
<div class="submit">
 <input type="button" onclick="onOpenSessionClick()" value="Open device access"> 
</div>
 </div>
</div>

Кнопка "открыть доступ к устройству" "не видна", так как на нее нажать? Как я могу сделать его видимым?

Спасибо за вашу помощь.


person Julien P.    schedule 14.05.2013    source источник
comment
Скриншоты не помогают при проблемах с Selenium/WebDriver. Вместо этого вы должны включить HTML в свой вопрос.   -  person Ross Patterson    schedule 14.05.2013
comment
Что происходит, когда вы запускаете свой код?   -  person Ross Patterson    schedule 14.05.2013
comment
Когда я выполняю свой код локально, это хорошо, но с сервером мой тест не пройден, потому что элемент не виден ‹div class=accContent accContentClosed › ‹div class=submit› ‹input type=button onclick=onOpenSessionClick() value=Открыть доступ к устройству› ‹/div› ‹/div› ‹/div›   -  person Julien P.    schedule 14.05.2013
comment
После редактирования вашего кода я почти уверен, что проблема может быть вовсе не в JavaScript. У вас серьезные проблемы, попробуйте сделать более точные селекторы xpath или css.   -  person aimbire    schedule 14.05.2013
comment
Кроме того, эти sleeps() не гарантируют, что элемент будет готов к клику, не говоря уже о потере времени. Если вы проходите через if, для запуска небольшой части кода требуется ~ 30 секунд. Со всем этим временем вы бы лучше тестировали сами.   -  person aimbire    schedule 14.05.2013
comment
Спасибо Скрипт отлично работает локально, и даже после нажатия на кнопку баян все равно выводится: нет так это джаваскрипт иначе при заводе должна появиться кнопка. Сон предназначен только для того, чтобы помочь мне увидеть, что происходит, он не будет использоваться, как только проблема будет решена. Я использовал самый точный, и xpath ничего не меняет.   -  person Julien P.    schedule 14.05.2013


Ответы (1)


Javascript работает «из коробки» с Selenium WebDrivers, включая драйвер Firefox. Проблема не в том, что javascript не работает. Если вы хотите убедиться в этом, просто откройте консоль во время длительного сна и запустите alert();. Или, чтобы развеять все сомнения, запустите это в своем тесте:

driver.get(baseUrl);
driver.execute('alert();');

Вы должны увидеть стандартное предупреждение браузера, указывающее, что javascript действительно работает правильно, и ваша проблема связана с чем-то другим.

У меня лично возникали проблемы, когда щелчок по элементу "крался" элементом над ним, часто это может происходить, если у вас есть элементы с фиксированным положением. Если вы считаете, что это может быть проблемой, попробуйте установить для elementScrollBehavior значение 1.

person lacy    schedule 13.10.2014