簡體   English   中英

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();打開網頁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/ <- 我已經准備了我的腳本的簡單版本,它可以讓您了解我的完整代碼的樣子。 亮點部分可能是錯誤的,只是為了向您展示我認為它是如何完成的,但這純粹是假設。

干杯! 珀克爾

您應該嘗試使用executeScript()如下:-

var element = driver.findElement(By.xpath("xPath goes here"));
driver.executeScrip‌t("arguments[0].style.backgroundColor = 'red'", element);

這是用於突出顯示元素的 Javascript 代碼。 Selenium 沒有任何本地方法可以突出顯示,因此唯一的出路是使用類似於以下的代碼:

JavascriptExecutor js=(JavascriptExecutor)driver;
js.executeScript("arguments[0].setAttribute('style','border: solid 2px red')", username);

這里 username 是 webelement 的名稱。

這是閃爍元素的解決方案,示例閃爍 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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM