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.executeScrip‌t("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();