我们是否可以使用JavascriptExecutor检索文本/拖放元素,就像我们在Selenium中使用gettext/Actions一样
在下面的代码中,如果my div包含作为文本的属性,那么只有它才会返回文本。我很好奇能找到新的方法来使用JavascriptExecutor来代替selenium,因为它们比selenium快得多我们是否可以使用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
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回答了这个问题,请接受它作为答案,这样她就可以为自己的工作赢得荣誉。