2012-01-20 4 views
0

У меня есть два элемента на моей странице (два элемента «отменить»).Как нажимать на элементы в ExtJS, используя Selenium?

<div unselectable="on" class="x-grid-cell-inner x-unselectable" style="text-align: left; " id="ext-gen1179"> 
Cancel 
</div> 

<div unselectable="on" class="x-grid-cell-inner x-unselectable" style="text-align: left; " id="ext-gen2951"> 
Cancel 
</div> 

Как мне щелкнуть по второму элементу? Очевидно, я не могу использовать идентификатор, потому что он случайным образом генерируется при каждом посещении. Что я могу использовать?

ответ

2


1. Используйте метод FindElements, который находит все IWebElements в текущем контексте с использованием данного механизма. (В этом случае, вы всегда должны знать, индекс элемента, который вы ищете.)

IWebDriver driver = new FirefoxDriver(); 
IList<IWebElement> cancelDivs = driver.FindElements(By.XPath("//div[text()='Cancel']")); 
cancelDivs[1].click(); //zero-base index 


2. Если те отменить кнопки в различных секциях, которые могут быть идентифицированы не-ExtJS ид атрибутов.

<div id='header'> 
    <div unselectable="on" class="x-grid-cell-inner x-unselectable" style="text-align: left; " id="ext-gen1179">Cancel</div> 
</div> 
<div id='footer'> 
    <div unselectable="on" class="x-grid-cell-inner x-unselectable" style="text-align: left; " id="ext-gen2951">Cancel</div> 
</div> 


IWebElement secondCancelDiv = driver.FindElement(By.XPath("//div[@id='footer']//div[text()='Cancel']")); 
secondCancelDiv.Click(); 


3. Если эти кнопки отмены в различных секциях, которые могут быть идентифицированы с помощью различных атрибутов класса ExtJS. (Используйте значимые из них)

<div id='ext-gen1060' class='x-grid3-body'> 
    <div unselectable="on" class="x-grid-cell-inner x-unselectable" style="text-align: left; " id="ext-gen1179">Cancel</div> 
</div> 
<div id='ext-gen2555' class='x-toolbar-right-row'> 
    <div unselectable="on" class="x-grid-cell-inner x-unselectable" style="text-align: left; " id="ext-gen2951">Cancel</div> 
</div> 


IWebElement secondCancelDiv = driver.FindElement(By.XPath("//div[@class='x-toolbar-right-row']//div[text()='Cancel']")); 
secondCancelDiv.Click(); 
0

Если:

  1. всегда есть только 2 'Отмена' кнопок на странице, и
  2. вы всегда должны получить 2-й,

использование //div[text()="Cancel"][2] селектор XPath, или просто найти оба они и нажмите второй.

+0

Более правильно, '= XPath (// ДИВ [текст() = "Отмена"]) [2]'. Это будет работать, даже если два элемента 'div' не являются братьями и сестрами. –

Смежные вопросы