2013-11-12 3 views
3

Am автоматизирует вещи, используя Selenium. Нужна ваша помощь, чтобы справиться с динамической Xpath, как показано ниже:Обработка динамического Xpath

Driver.findElement(By.xpath("//[@id='INQ_2985']/div[2]/tr/td/div/div[3]/div")).click();

Как указано выше INQ_2985 изменения 2986, 2987, 2988 и т.д. во время каждого запуска

HTML КОД:

< div> class="context-menu-item-inner" style="background-image:url(../images/productSmall.png);">Tender Assignment < /div> 

Пробовал разные комбинации как ниже, но без успеха:

// Driver.findElement(By.name("//input[@name='Tender Assignment']")).click(); 
// Driver.findElement(By.className("context-menu-item-inner")).click();` 

Можете ли вы помочь мне в этом.

ответ

1

вы можете попробовать использовать или starts-with() в XPath,

выше XPath можно переписать следующим образом,

Driver.findElement (By.xpath ("// * [начинается-с (@ идентификатор, 'INQ')]/дела [2]/тр/тд/дела/дела [3]/дел ")) нажмите().

, если вы можете разместить больше вашего HTML, мы можем помочь улучшить ваш XPath ..

  • кроме того, используя не рекомендуется такие длинные XPath, это может привести к тому, тест на провал чаще
не

, например, если «новые данные таблицы или ДИВ» добавляются в пользовательский интерфейс, выше XPath больше не действителен

  • вы должны попытаться использовать идентификатор, класс или другие атрибуты, чтобы приблизиться к элементу вы пытаетесь найти
  • я лично рекомендую использовать cssSelectors над xpath
0

если ваш XPath варьируется

Пример: "//*[@id='msg500']" , "//*[@id='msg501']", "//*[@id='msg502']" и так далее ...

Затем используйте этот код в скрипте:

for (int i=0;i<=9;i++) { 
String mpath= "//*[@id='msg50"+i+"']"; 
driver.findElement(By.xpath(mpath)).click(); 
} 
0

Лучший выбор - использовать полный xpath вместо id, который вы можете легко получить через firebug.

например.

/html/body/div[3]/div[3]/div[2]/div/div[2]/div[1]/div/div[1] 
1

вы можете использовать много методов, использование неявно ждать;

driver.findElement(By.xpath("//*[contains(@id,'select2-result-label-535')]").click(); 

driver.findElement(By.xpath("//*[contains(text(), 'select2-result-label-535')]").click(); 
1

Хорошо использовать регулярное выражение

driver.findElement(By.xpath("//*[contains(@id,'INQ_')]") 

Примечание: Если у вас есть единый идентификатор с именем начинается с INQ_, то вы можете принять решение по элементу. Если есть идентификатор, то вы можете извлечь его как List<WebElements>, а затем сопоставить его с конкретным текстом элемента (element.getText().trim() =="Linked Text", и если он будет соответствовать, тогда выполните действие. Вы можете следовать другой логике для прохождения и соответствия.

1

вы можете использовать css -

div.context-menu-item-inner 

Используйте этот XPath:

driver.findElement(By.cssSelector("div.context-menu-item-inner").click(); 
Смежные вопросы