Как выполнять javascript в коде JAVA теста (как их находить)

javascript
webdriver
java
Теги: #<Tag:0x00007f7b70a5e1a8> #<Tag:0x00007f7b70a5fe90> #<Tag:0x00007f7b70a5fd50>

(Prodigy Diesel Power) #1

Конкретно есть сайт-
http://www.xxx.ru/ru-RU/Уход-за-телом/Спреи-для-тела-MKMen-/100601.partId?eCatId=10001

Введите туда вместо числа 1, нолик и нажмите ENTER Выполниться скрипт, вопрос как его найти и выполнить самому в коде ? не эмитируя нажатие в коде ENTER

if (driver instanceof JavascriptExecutor) {
        ((JavascriptExecutor)driver).executeScript("yourScript();");
    }


(John Linc Malkowskiy) #2

Заюзать например метод.

public void setElementText(By by, String text){
          JavascriptExecutor js = (JavascriptExecutor) driver;
          WebElement element = driver.findElement(by);
          js.executeScript("arguments[0].innerHTML = \""+text+"\";", element);
         }

А потом в тест вызвать его.
setElementText(By.id(“PlaceHolderMain_ctl01_ctl05_QuantityInput”), “0”);

Вроде так.


(Prodigy Diesel Power) #3

хмм не работает
да и вообще что значит ? ( “arguments[0].innerHTML = “”+text+”";", element); конекретно наверное: arguments[0].innerHTML

почему оно должно решать эту проблему


(John Linc Malkowskiy) #4

импорты сделал?
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebElement;

Еще раз.

@Test
    public void testPages(){
        driver.get("http://automated-testing.info");
        setElementAttribute(By.xpath("//input[@id='PlaceHolderMain_ctl01_ctl05_QuantityInput'][@value=1]"),"value","0");
        
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }        
        
    }
     public void setElementAttribute(By by, String attr, String value){
          JavascriptExecutor js = (JavascriptExecutor) driver;
          WebElement element = driver.findElement(by);
          js.executeScript("arguments[0].setAttribute('"+attr+"', '"+value+"');", element);
         }

А так? Произойдет замена атрибута value с 1 на 0. Но я незнаю поможет это тебе или нет. Код работает, проверил.


(Stan) #5

Если уж делаете костыль (как это еще назвать?) с помощью жс-а, то делайте его правильно:

js.executeScript("document.getElementById('PlaceHolderMain_ctl01_ctl05_QuantityInput').value=0");

Зачем эта порнография с innerHTML или с поиском сначала элемента вебдрайвером, а потом сетом жс-ом, сразу делайте жс-ом.


(Prodigy Diesel Power) #6

Уау круто работает, это получает команда javascript?
->> document.getElementById(‘PlaceHolderMain_ctl01_ctl05_QuantityInput’).value=0"

и

есть вариант вообще такое вернее бывает, чтобы вызвать скрипт обработки самого сайта? или типа того


(John Linc Malkowskiy) #7

А тебе вообще зачем ява скрипт?
Что тебе надо проверить/увидеть после того как ты там 0 поставил?


(Prodigy Diesel Power) #8

не просто если сделать clear
потом
type (5)

получался косяк - надпись введите корректное число, пока не перейдешь в другом поле или не нажмешь в нем enter, после ввода числа.
Типа clear так работает…в отличии от type, что после него происходит срабатывание скрипта на корректность количества товара (а в тот момент там пустое вообще)