2013-09-13 4 views
3

Я пытаюсь выделить элемент (вокруг границы), который находится в selenium webdriver с помощью C#. Я ищу в сети все, что я нашел, это java-коды, но это нужно в C#.Как выделить элемент в selenium webdriver

или есть ли другой способ сделать это.

благодаря

ответ

6

Там нет родного способа сделать это, но потому, что Селен позволяет использовать для выполнения Javascript, вы можете сделать это только с немного больше работы:

Поэтому вопрос становится «как Я изменяю границы элементов в Javascript? "

Если вы используете jQuery, это немного проще, вы можете найти элемент, а затем установить некоторые свойства границы. JQuery имеет аккуратную css свойство, которое позволяет передать в JSON словаре значений, он будет обрабатывать настройки их все для вас, примером может быть как:

jQuery('div.tagged > a:first').css({ "border-width" : "2px", "border-style" : "solid", "border-color" : "red" }); 

Это будет найти элемент, и установить его граница должна быть solid на 2px широким с цветом границы red.

Однако, если у вас уже есть экземпляр IWebElement (скорее всего), вы можете взять «нахождение» ответственности из jQuery/Javascript и сделать его проще.

Это будет выполняться что-то вроде:

var jsDriver = (IJavaScriptExecutor)driver; 
var element = // some element you find; 
string highlightJavascript = @"$(arguments[0]).css({ ""border-width"" : ""2px"", ""border-style"" : ""solid"", ""border-color"" : ""red"" });"; 
jsDriver.ExecuteScript(highlightJavascript, new object[] { element }); 

Если вы просто хотите основные Javascript, то вы можете воспользоваться .cssText собственности, что позволяет дать полную строку стилей CSS, а не добавлять их индивидуально (хотя я не знаю, как поддерживается это кросс-браузер):

var jsDriver = (IJavaScriptExecutor)driver; 
var element = // some element you find; 
string highlightJavascript = @"arguments[0].style.cssText = ""border-width: 2px; border-style: solid; border-color: red"";"; 
jsDriver.ExecuteScript(highlightJavascript, new object[] { element }); 

(хотя есть несколько способов, я просто пошел на самый многословный, чтобы сделать его более четким)

2

Благодаря Арран я только изменил свой ответ ..

var jsDriver = (IJavaScriptExecutor)driver; 
var element = //element to be found 
string highlightJavascript = @"arguments[0].style.cssText = ""border-width: 2px; border-style: solid; border-color: red"";"; 
jsDriver.ExecuteScript(highlightJavascript, new object[] { element }); 

он прекрасно работает ... спасибо еще раз.

0

Написать ниже JavaScript палачу кода в файле класса

public void elementHighlight(WebElement element) { 
      for (int i = 0; i < 2; i++) { 
       JavascriptExecutor js = (JavascriptExecutor) driver; 
       js.executeScript(
         "arguments[0].setAttribute('style', arguments[1]);", 
         element, "color: red; border: 5px solid red;"); 
       js.executeScript(`enter code here` 
         "arguments[0].setAttribute('style', arguments[1]);", 
         element, ""); 
      } 

Вызов выше метод из тестового Селен случае, чтобы выделить веб-страницы элемент. Посмотрите ниже код, который показывает, как это делается. Метод elementHighlight вызывается с помощью searchBox в качестве аргумента.

@Test 
    public void GoogleSearch() throws Exception, SQLException { 

     driver.findElement(By.xpath("//center/div[2]")).click(); 
     WebElement searchBox = driver.findElement(By.xpath("//div[3]/div/input")); 
     elementHighlight(searchBox); 
     driver.findElement(By.xpath("//div[3]/div/input")).clear(); 
     driver.findElement(By.xpath("//div[3]/div/input")).sendKeys("Test"); 
     driver.findElement(By.xpath("//button")).click(); 

    } 

При выполнении вышеуказанного теста Selenium проверит окно поиска на главной странице Google. Вы можете повторно использовать метод elementHighlight для выделения любых элементов на веб-странице.

1

C# Метод расширения: высвечивается и очищается через 3 секунды.

using OpenQA.Selenium; 
using OpenQA.Selenium.Chrome; 
using OpenQA.Selenium.Remote; 
using System.Reactive.Linq; 

public static class SeleniumUtil 
{ 
    public static void Highlight(this IWebElement context) 
    { 
     var rc = (RemoteWebElement)context; 
     var driver = (IJavaScriptExecutor)rc.WrappedDriver; 
     var script = @"arguments[0].style.cssText = ""border-width: 2px; border-style: solid; border-color: red""; "; 
     driver.ExecuteScript(script, rc); 
     Observable.Timer(new TimeSpan(0, 0, 3)).Subscribe(p => 
     { 
      var clear = @"arguments[0].style.cssText = ""border-width: 0px; border-style: solid; border-color: red""; "; 
      driver.ExecuteScript(clear, rc); 
     }); 
    } 
} 
Смежные вопросы