Как выполнять функции скрипта с большим количеством параметров - Selenium - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь выполнить скрипт с функциями, у которых больше параметров, и каждая попытка возвращает ошибку:

Exception in thread "main" org.openqa.selenium.JavascriptException: ReferenceError: coords is not defined

мой скрипт:

enter code here

if (driver instanceof JavascriptExecutor) {
        ((JavascriptExecutor) driver)

.executeScript("setNewCellType(new ZmianaTypuCommandFactory(),currentRozdzial,currentTable,this.activeCoords)");

Я нахожу функции в инструментах разработчика, и его форма:

 function setNewCellType(factory,nrRozdzial,tab,coords,newState,mode)

и я устанавливаю точку останова в этом месте, чтобы получить параметры, и параметры:

setNewCellType(newZmianaTypuCommandFactory(),currentRozdzial,currentTable,this.activeCoords,params);

this.activeCoords have value 
(col: 2
colspan: 1
row: 2
rowspan: 1
siatkaCol: 2
siatkaRow: 2)

кто-то может мне помочь?

элемент Iхочу использовать имеет динамическое значение в этом сеансе, эти элементы больше.

Больше сценариев:

 driver.findElement(By.id("addTableRowCount")).clear();
 driver.findElement(By.id("addTableRowCount")).sendKeys("9");
 driver.findElement(By.id("addTableColCount")).clear();
 driver.findElement(By.id("addTableColCount")).sendKeys("2");
 driver.findElement(By.id("addTableOK")).click();
 driver.switchTo().defaultContent();
 driver.findElement(By.id("tytulTabeli")).sendKeys("Tytuł tabeli - 1");
 wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//p[text()='Obszar danych']")));
 driver.findElement(By.xpath("//p[text()='Obszar danych']")).click();   
    if (driver instanceof JavascriptExecutor) {
        ((JavascriptExecutor) driver)
        .executeScript("setNewCellType(new ZmianaTypuCommandFactory(),currentRozdzial,currentTable,this.activeCoords)");

@Zhivko.Kostadinov

var ZmianaTypuCommandFactory = Class.create(CellTypeChangeCommandFactory,{
initialize:  function($super){
$super(new ZmianaTypuValidator());
this.wymagalnoscFactory = new WymagalnoscCommandFactory();
},
createSingleCmd:    function(nrRozdzial,tab,coords,newState){
if(newState.cellType.cellTypeInt == TYPY_KOMOREK.ZAZNACZENIE.cellTypeInt)
{ var cmd = new CompositeCommand();
var typeCmd = new ZmianaTypuCommand();
typeCmd.setState(tab,coords,newState);
cmd.addCommand(typeCmd);
var wymagalnoscCmd = this.wymagalnoscFactory.createCmd(nrRozdzial,tab,coords,true);
if(wymagalnoscCmd){
 cmd.addCommand(wymagalnoscCmd);
return cmd;
}
else{
return typeCmd;}}
else{
var cmd = new ZmianaTypuCommand();
cmd.setState(tab,coords,newState);
return cmd; }}});

1 Ответ

0 голосов
/ 15 мая 2018

Скорее всего, ваша проблема здесь:

this.activeCoords

Вы должны помнить, что указатель "this" зависит от контекста.Вы должны передать «абсолютные ссылки», то есть то, на что вы можете ссылаться из консоли, как исполнитель скриптов, afaik запускается в глобальном контексте.

Хороший подход к проверке тестовых скриптов - если вы можете запустить его вНа консоли инструментов разработчика вы можете запустить ее с помощью scriptExecutor

Если во время теста данные всегда одинаковы, вы можете выполнить:

executeScript("setNewCellType(new ZmianaTypuCommandFactory(),currentRozdzial,currentTable,
{
    col: 2
    colspan: 1
    row: 2
    rowspan: 1
    siatkaCol: 2
    siatkaRow: 2 
},
{
   // params data in here
   cellType: {type:'Kw'}
}
)");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...