Selenium-WebDriver 如何使用 javascript 和 firefox 浏览器突出显示元素
Selenium-WebDriver how to highlight element using javascript and firefox browser
我在创建有效函数时遇到问题,该函数将突出显示网页上的某些已定义元素。请注意,我是编码初学者,问题可能是简单的环境设置问题,或者缺乏 javascript/selenium 功能的主要知识。
我在 Eclipse Neon 中创建我的脚本。为了设置环境,我安装了 node.js 和 geckodriver 以便能够在 firefox 浏览器上运行。我的脚本开头是:
var webdriver = require('selenium-webdriver'),
By = webdriver.By
var driver = new webdriver.Builder().forBrowser('firefox').build();
我使用driver.get();
打开网页,然后我简单地使用xPath定义元素位置例如:
var element = driver.findElement(By.xpath("xPath goes here"));
现在问题开始了,我应该怎么做才能让WebDriver用for ex高亮这个指定的元素。红色边框?在浏览 Stack 和其他类似页面时,我找到的唯一答案是关于在 Java 语法中使用 JavaScript Executor,或者使用
的一些 webdriver 函数
element.style.backgroundColor = 'red'
但我收到控制台错误,style
或语法的其他部分不是函数。在这一点上,我不知道如何实现这一点,我慢慢地怀疑,我是否能够在不了解 html5/java 的情况下完成这项任务。也许有人遇到过这样的困难并分享线索?
https://jsfiddle.net/osav574j/ <- 我准备了我的脚本的简化版本,它可以让您了解我的完整代码的样子。高亮部分可能是错误的,它只是为了告诉你,我认为它可能是如何完成的,但这纯粹是假设。
干杯!
珀克勒
这是 Javascript 突出显示元素的代码。 Selenium 没有任何要突出显示的本机方法,因此唯一的出路是使用类似于以下的代码:
JavascriptExecutor js=(JavascriptExecutor)driver;
js.executeScript("arguments[0].setAttribute('style','border: solid 2px red')", username);
这里的用户名是网络元素的名称。
您应该尝试使用 executeScript()
,如下所示:-
var element = driver.findElement(By.xpath("xPath goes here"));
driver.executeScript("arguments[0].style.backgroundColor = 'red'", element);
这是一个闪烁元素的解决方案,以闪烁 google 搜索输入字段为例。您可以参数化闪烁的样式、时间间隔/频率。
const browsertype = 'chrome';
//const browsertype = 'firefox';
const { Builder, By, Key, until} = require('selenium-webdriver');
require( browsertype + 'driver' );
//require('selenium-webdriver/' + browsertype);
const link = 'https://www.google.hu/';
const btx = '//input[@name="q"]';
var browser = new Builder().forBrowser( browsertype ).build();
browser.navigate().to( link );
//browser.get( link );
var element = browser.findElement( By.xpath( btx ) );
blink( browser, element );
async function blink( browser, element ) {
var i,
blink = { wait: 500,
duration: 3000,
//on: "arguments[0].style.backgroundColor = 'purple'",
//off: "arguments[0].style.backgroundColor = 'white'",
on: "arguments[0].setAttribute('style','border: solid 2px yellow;')",
off: "arguments[0].setAttribute('style','border: solid 0px white;')"
}
blink.loop = Math.floor( blink.duration / blink.wait );
blink.loop += blink.loop % 2;
for(i=0;i<blink.loop;i++){
await browser
.executeScript( blink[ i%2==0 ? "on" : "off"],
element );
await browser.sleep( blink.wait );
}
}
//driver.quit();
我在创建有效函数时遇到问题,该函数将突出显示网页上的某些已定义元素。请注意,我是编码初学者,问题可能是简单的环境设置问题,或者缺乏 javascript/selenium 功能的主要知识。
我在 Eclipse Neon 中创建我的脚本。为了设置环境,我安装了 node.js 和 geckodriver 以便能够在 firefox 浏览器上运行。我的脚本开头是:
var webdriver = require('selenium-webdriver'),
By = webdriver.By
var driver = new webdriver.Builder().forBrowser('firefox').build();
我使用driver.get();
打开网页,然后我简单地使用xPath定义元素位置例如:
var element = driver.findElement(By.xpath("xPath goes here"));
现在问题开始了,我应该怎么做才能让WebDriver用for ex高亮这个指定的元素。红色边框?在浏览 Stack 和其他类似页面时,我找到的唯一答案是关于在 Java 语法中使用 JavaScript Executor,或者使用
的一些 webdriver 函数element.style.backgroundColor = 'red'
但我收到控制台错误,style
或语法的其他部分不是函数。在这一点上,我不知道如何实现这一点,我慢慢地怀疑,我是否能够在不了解 html5/java 的情况下完成这项任务。也许有人遇到过这样的困难并分享线索?
https://jsfiddle.net/osav574j/ <- 我准备了我的脚本的简化版本,它可以让您了解我的完整代码的样子。高亮部分可能是错误的,它只是为了告诉你,我认为它可能是如何完成的,但这纯粹是假设。
干杯! 珀克勒
这是 Javascript 突出显示元素的代码。 Selenium 没有任何要突出显示的本机方法,因此唯一的出路是使用类似于以下的代码:
JavascriptExecutor js=(JavascriptExecutor)driver;
js.executeScript("arguments[0].setAttribute('style','border: solid 2px red')", username);
这里的用户名是网络元素的名称。
您应该尝试使用 executeScript()
,如下所示:-
var element = driver.findElement(By.xpath("xPath goes here"));
driver.executeScript("arguments[0].style.backgroundColor = 'red'", element);
这是一个闪烁元素的解决方案,以闪烁 google 搜索输入字段为例。您可以参数化闪烁的样式、时间间隔/频率。
const browsertype = 'chrome';
//const browsertype = 'firefox';
const { Builder, By, Key, until} = require('selenium-webdriver');
require( browsertype + 'driver' );
//require('selenium-webdriver/' + browsertype);
const link = 'https://www.google.hu/';
const btx = '//input[@name="q"]';
var browser = new Builder().forBrowser( browsertype ).build();
browser.navigate().to( link );
//browser.get( link );
var element = browser.findElement( By.xpath( btx ) );
blink( browser, element );
async function blink( browser, element ) {
var i,
blink = { wait: 500,
duration: 3000,
//on: "arguments[0].style.backgroundColor = 'purple'",
//off: "arguments[0].style.backgroundColor = 'white'",
on: "arguments[0].setAttribute('style','border: solid 2px yellow;')",
off: "arguments[0].setAttribute('style','border: solid 0px white;')"
}
blink.loop = Math.floor( blink.duration / blink.wait );
blink.loop += blink.loop % 2;
for(i=0;i<blink.loop;i++){
await browser
.executeScript( blink[ i%2==0 ? "on" : "off"],
element );
await browser.sleep( blink.wait );
}
}
//driver.quit();