如何使用更多参数执行脚本函数 - Selenium

时间:2018-05-15 06:55:13

标签: javascript selenium-webdriver

我尝试使用具有更多参数的函数执行脚本,并且每次尝试都返回错误:

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)
有人可以帮帮我吗?

我想要使用的元素在此会话中具有动态值,这些项目更多。

更多脚本:

 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 :(得分:0)

很可能你的问题在这里:

this.activeCoords

你必须记住“这个”指针取决于上下文。您必须传递“绝对引用”,即您可以从控制台引用的内容,作为脚本执行程序,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'}
}
)");