我们是否可以使用JavascriptExecutor检索文本/拖放元素,就像我们在Selenium中使用gettext/Actions一样

我们是否可以使用JavascriptExecutor检索文本/拖放元素,就像我们在Selenium中使用gettext/Actions一样,selenium,selenium-webdriver,Selenium,Selenium Webdriver,在下面的代码中,如果my div包含作为文本的属性,那么只有它才会返回文本。我很好奇能找到新的方法来使用JavascriptExecutor来代替selenium,因为它们比selenium快得多 WebElement gettexxxt= driver.findElement(By.id("loginButton")); JavascriptExecutor executor1 = (JavascriptExecutor) driver; String text = (String) exec

在下面的代码中,如果my div包含作为文本的属性,那么只有它才会返回文本。我很好奇能找到新的方法来使用JavascriptExecutor来代替selenium,因为它们比selenium快得多

WebElement gettexxxt= driver.findElement(By.id("loginButton"));
JavascriptExecutor executor1 = (JavascriptExecutor) driver;
String text = (String) executor1.executeScript("return arguments[0].text;", gettexxxt));
System.out.println(text);
现在,我正在使用JavascriptExecutor检索以下文本

WebElement Rent_rentc =(WebElement) ((JavascriptExecutor) driver).executeScript("return document.getElementById('loginButton');");
System.out.println(Rent_rentc.getText());
除了上述解决方案外,是否有其他方法可以使用JavascriptExecutor获取文本

注意:-我正在编辑这个问题,因为我在本页中引用了Vicky的答案,得到了如何从JavascriptExecutor获取文本的答案。请从此处开始回答我的下一个问题,即如何使用JavascriptExecutor执行拖放操作。

我在下面的代码中遇到错误,错误:-未找到匹配项

    driver.get("https://jqueryui.com/droppable/");
    WebElement iframe=driver.findElement(By.xpath(".//*[@id='content']/iframe"));
    driver.switchTo().frame(iframe);
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

    try{  
      String filePath = "./dnd.js-master//dnd.js";
      String source = "div[id='draggable']";
      String target = "div[id='droppable']";
      StringBuffer buffer = new StringBuffer();
      String line;
      BufferedReader br = new BufferedReader(new FileReader(filePath));
      while((line = br.readLine())!=null)
          buffer.append(line);

      Pattern pattern = Pattern.compile("'(.*?)'");
      Matcher matcherSource = pattern.matcher(source);
      Matcher matcherTarget = pattern.matcher(target);
      String cssSource = "#" + matcherSource.group(1);
      String cssTarget = "#" + matcherTarget.group(1);

      String javaScript = buffer.toString();

      javaScript = javaScript + "$('" + cssSource + "').simulateDragDrop({ dropTarget: '" + cssTarget + "'});";
      ((JavascriptExecutor)driver).executeScript(javaScript);

    }
    catch(Exception ex)
    {
        System.out.println(ex.getMessage());
    }
另一个代码错误:-应为表达式,得到“.”

    WebDriver driver = new FirefoxDriver();
    driver.manage().window().maximize();
    driver.get("https://jqueryui.com/droppable/");
     String line = null;
      String source = ".//*[@id='draggable']";
      String target = ".//*[@id='droppable']";
      try{
     BufferedReader br = new BufferedReader(new FileReader("./dnd.js-master//Drag.js"));
     StringBuffer buffer = new StringBuffer();
     while((line = br.readLine())!=null)
         buffer.append(line);

     String javaScript = buffer.toString();

     Thread.sleep(5000);//you can remove it added just to show you that drag and drop appeared as it is too fast

     String java_Script = javaScript + "$("+source+").simulateDragDrop({ dropTarget: "+target+"});";

     ((JavascriptExecutor)driver).executeScript(java_Script);
      }
            catch(Exception ex){
                System.out.println(ex.getMessage());
      }

}使用下面的Javascript获取元素的文本

String Rent_rentc =(String) ((JavascriptExecutor) driver).executeScript("return document.getElementById('loginButton').getElementsByTagName('div')[0].innerHTML;");
另外,我想知道我们是否可以使用 JavascriptExecutor

WebElement Rent_rentc =(WebElement) ((JavascriptExecutor) driver).executeScript("return document.getElementById('loginButton');");
System.out.println(Rent_rentc.getText());
使用上述javascript库的工作示例已经发布在

注意:-我正在编辑这个问题,因为我得到了如何 通过引用本文中的Vicky answer从JavascriptExecutor获取文本 页请从这里开始回答我的下一个问题,即我们如何 使用JavascriptExecutor执行拖放操作

我在下面的代码中遇到错误,错误:-未找到匹配项

编辑:

(function ($) {
    $.fn.simulateDragDrop = function (options) {
        return this.each(function () {
            new $.simulateDragDrop(this, options);
        });
    };
    $.simulateDragDrop = function (elem, options) {
        this.options = options;
        this.simulateEvent(elem, options);
    };
    $.extend($.simulateDragDrop.prototype, {
        simulateEvent: function (elem, options) {
            /*Simulating drag start*/
            var type = 'dragstart';
            var event = this.createEvent(type);
            this.dispatchEvent(elem, type, event);

            /*Simulating drop*/
            type = 'drop';
            var dropEvent = this.createEvent(type, {});
            dropEvent.dataTransfer = event.dataTransfer;
            this.dispatchEvent($(options.dropTarget)[0], type, dropEvent);

            /*Simulating drag end*/
            type = 'dragend';
            var dragEndEvent = this.createEvent(type, {});
            dragEndEvent.dataTransfer = event.dataTransfer;
            this.dispatchEvent(elem, type, dragEndEvent);
        },
        createEvent: function (type) {
            var event = document.createEvent("CustomEvent");
            event.initCustomEvent(type, true, true, null);
            event.dataTransfer = {
                data: {
                },
                setData: function (type, val) {
                    this.data[type] = val;
                },
                getData: function (type) {
                    return this.data[type];
                }
            };
            return event;
        },
        dispatchEvent: function (elem, type, event) {
            if (elem.dispatchEvent) {
                elem.dispatchEvent(event);
            } else if (elem.fireEvent) {
                elem.fireEvent("on" + type, event);
            }
        }
    });

})(jQuery);
将上述jquery保存到文件ex:Drag.js

     driver.get("http://the-internet.herokuapp.com/drag_and_drop");
     String line = null;

     BufferedReader br = new BufferedReader(new FileReader("/path/Drag.js"));
     StringBuffer buffer = new StringBuffer();
     while((line = br.readLine())!=null)
         buffer.append(line);

     String javaScript = buffer.toString();

     Thread.sleep(5000);//you can remove it added just to show you that drag and drop appeared as it is too fast

     String java_Script = javaScript + "$('#column-a').simulateDragDrop({ dropTarget: '#column-b'});";

     ((JavascriptExecutor)driver).executeScript(java_Script);

}
请解释它将如何与包含或子项的同一div一起工作 div将包含许多类似于div的属性

提交
document.getElementById('loginButton')//将找到id为loginButton的第一个元素
登录
document.getElementById('loginButton').getElementsByTagName('div')[0]//将找到id为loginButton的第一个元素,然后在其中找到第一个div子元素
document.getElementById('loginButton').getElementsByTagName('div')[1]//将找到id为loginButton的第一个元素,然后在其中找到第二个div子元素
document.getElementById('loginButton').getElementsByTagName('div')[0]。getElementsByTagName('div')[0]。innerHTML//将查找id为loginButton的第一个元素,然后查找其中的第一个div子元素,然后查找其中的第一个div子元素
//您还可以使用其他属性,如document.getElementsByClassName
你能给我提供一些我可以参考/学习的链接吗 JavascriptExecutor的格式

WebElement Rent_rentc =(WebElement) ((JavascriptExecutor) driver).executeScript("return document.getElementById('loginButton');");
System.out.println(Rent_rentc.getText());


希望这对您有所帮助。如果它不起作用,请返回

我已尝试使用.innerHTML,但它提供了完整的DOM堆栈。我只需要div的文本。。。。。使用.innerHTML后得到的结果如下:-Continued@Shubhamjain请发布该webelement登录名@ShubhamJain的html,并编辑了上述代码…已检查,工作正常。请检查并返回OK Vicky。。我也会试试的,很快会给你回复。非常感谢您的努力、帮助和时间。你只需要问一个问题,每个。。。问题。您需要为编辑创建一个新问题。如果Vicky回答了这个问题,请接受它作为答案,这样她就可以为自己的工作赢得荣誉。